⑴ android開發如何獲得第三方應用Widget的包名和類名
最近在做Android的平板的開發,想在桌面上預置一些第三方應用的Widget,在桌面預置Widget的方法就是要獲得應用的包名和類名。 桌面預置widget的方法 在Launcher的配置文件 res/xml/default_workspace.xml中添加如下的代碼:<appwidget launcher:packageName="com.google.android.apps.genie.geniewidget" //預置應用的包名 launcher:className="com.google.android.apps.genie.geniewidget.miniwidget.MiniWidgetProvider" //預置應用的Provider的類名,不是Activity的類名 launcher:screen="1"//在第幾屏0為第一屏,launcher:x="0"//x坐標launcher:y="0"//y坐標 launcher:spanX="4"//x方向占幾個單元格 launcher:spanY="1"///y方向占幾個單元格 通過logcat有時可以找到應用的包名和Provider類名,此方法不可取,容易出錯。系統的widget可以通過查找相關的源碼找到對應的包名和Provider的類名,但是第三方應用看不到源碼,但是也可以通過反編譯第三方應用,獲得相應的Maifest.xml文件,找到對應的包名和Provider類名,但是此方法比較繁瑣。 可以通過在Launcher中添加如下代碼,可以將系統中所安裝的所有 的widget的信息列印出來: 在Launcher.java中的onCreate方法中添加下面的代碼: List<=mAppWidgetManager.getInstalledProviders();finalintproviderCount=providers.size();for(inti=0;i<providerCount;i++){ ComponentNameprovider=providers.get(i).provider;Log.i("xxx", "packagename:" +provider.getPackageName()+ "classname:" +provider.getClassName());}新編譯Launcher,把Launcher push進去之後,執行 adb logcat -s xxx,就可以看到列印出來的Log信息,包名和Provider了類名。 桌面預置shortcut的方法: 在Launcher的配置文件 res/xml/default_workspace.xml中添加如下的代碼:<favorites
⑵ 如何在Android系統中集成第三方軟體
將開發的第三方應用比如應用名為 VTest,項目結構如下圖所示:
將項目移到Android系統源碼:workspace_Android/packages/apps路徑下 [workspace_Android為Android工程,名字是自定義命名的],注意Android工程首先必須是全編過的。
2. 在當前目錄(workspace_Android/packages/apps/VTest)下新建一個 Android.mk 文件(這個文件的作用自己google),當然也可以從已有的系統項目,比如Browser中拷貝Android.mk文件然後修改。
修改如下所示:
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
# Only compile source java files in this apk.LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := VTestLOCAL_CERTIFICATE := platformLOCAL_STATIC_JAVA_LIBRARIES := MapAPILOCAL_SHARED_LIBRARIES := MapApiEngine
include $(BUILD_PACKAGE)# ============================================================include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=MapAPI:libs/mapapi.jarLOCAL_PREBUILT_LIBS :=MapApiEngine:libs/armeabi/libBMapApiEngine_v1_3_5.soLOCAL_MODULE_TAGS := optionalinclude $(BUILD_MULTI_PREBUILT)
[說明]:其中 LOCAL_STATIC_JAVA_LIBRARIES 和 LOCAL_SHARED_LIBRARIES 為靜態庫和共享庫,其中的區別自己搜索,這里不再闡述。
⑶ 如何在Android中的Activity啟動第三方應用程序
在Android中,Activity有個棧,一個Activity結束掉,會回到上一個Activity,並不是退出應用程序。Android中,退出應用程序的方式:1.通過pidintpid=android.os.Process.myPid();//獲取當前應用程序的PIDandroid.os.Process.killProcess(pid);//殺死當前進程這種方法退出應用,是會保留某些後進程,例如:Service,Notifications等。2.通過=(ActivityManager)context.getSystemService(ACTIVITY_SERVICE);//獲取應用程序管理器manager.killBackgroundProcesses(getPackageName());//強制結束當前應用程序這種方式退出應用,會結束本應用程序的一切活動,因為本方法會根據應用程序的包名殺死所有進程包括Activity,Service,Notifications等。
⑷ android 跨進程獲取第三方app 數據的方式有哪些
如果第三方APP是你自己開發,可以通過文件、ContentProvider、發送廣播等等都可以實現。
如果第三方APP不是你自己開發的,就要看他有沒有暴露出URI,也就是ContentProvider數據共享,就像讀取系統聯系人一樣。如果沒有URI......另想辦法,好自為之。。。
⑸ android在應用內如何打開第三方應用
方法一Intent intent=new Intent();
//包名 包名+類名(全路徑)
intent.setClassName("com.linxcool", "com.linxcool.PlaneActivity");
startActivity(intent);
12345
方法二
Intent intent = new Intent();
ComponentName comp = new ComponentName("com.linxcool","com.linxcool.PlaneActivity");
intent.setComponent(comp);
intent.setAction("android.intent.action.MAIN");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
⑹ 我想問一下,android開發時要引用第三方應用,我要怎麼知道程序的入口包名和主Activity呢,比較急呢
先通過下面的getPackages()方法獲得所有系統安裝的應用,根據列印出來的日誌找到你要找的應用的對應的包名,在調用startAppByPackageName()方法啟動應用就可以了,主activity不需要的
private ArrayList<PInfo> getPackages() {
ArrayList<PInfo> apps = getInstalledApps();
final int max = apps.size();
for (int i=0; i<max; i++) {
apps.get(i).prettyPrint();
}
return apps;
}
class PInfo {
private String appname = "";
private String pname = "";
private String versionName = "";
private int versionCode = 0;
private Drawable icon;
private void prettyPrint() {
Log.e("zhm",appname + "\t" + pname + "\t" + versionName + "\t" + versionCode);
}
}
private ArrayList<PInfo> getInstalledApps() {
ArrayList<PInfo> res = new ArrayList<PInfo>();
List<PackageInfo> packs = parent.getPackageManager().getInstalledPackages(0);
for(int i=0;i<packs.size();i++) {
PackageInfo p = packs.get(i);
if (p.versionName == null) {
continue ;
}
PInfo newInfo = new PInfo();
newInfo.appname = p.applicationInfo.loadLabel(parent.getPackageManager()).toString();
newInfo.pname = p.packageName;
newInfo.versionName = p.versionName;
newInfo.versionCode = p.versionCode;
newInfo.icon = p.applicationInfo.loadIcon(parent.getPackageManager());
res.add(newInfo);
}
return res;
}
public void startAppByPackageName(String packageName){
PackageInfo pi = null;
try {
pi = getPackageManager().getPackageInfo(packageName, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
List<ResolveInfo> apps = getPackageManager().queryIntentActivities(resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null ) {
String packageName1 = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName cn = new ComponentName(packageName1, className);
intent.setComponent(cn);
startActivity(intent);
}
}
⑺ 如何獲取android手機上已安裝軟體的下載位置或來源
android手機安裝的軟體在SD卡上無法找到的。但是android手機本身就會對apk做備份處理,也就是說只要手機上裝的應用,都可以在手機上找出來
查找方式:
用戶安裝的第三方應用,apk文件保存在 /data/app 目錄下
系統自帶的應用,apk文件保存在 /system/app 目錄下
android手機本身是無法查看的,需要連接到電腦上才能查看
android 手機是linux內核,/data /system目錄都是屬於 root用戶才能查看的,因此你需要先獲取root許可權才能查看
⑻ 怎麼打開第三方應用程序
需求場景:
在自己開發的應用程序里,有個跳轉到其他應用的按鈕,比如分享到「新浪微博」,當點擊這個按鈕時,先判斷手機中是否有安裝「新浪微博」這個程序,有則啟動「新浪微博」客戶端,否則從指定的URL地址進行下載。
簡言之,開啟其他應用,包名跳轉。
1、從一個應用跳轉到其他應用要獲取什麼信息?
need第三方應用的包名,以及下載鏈接。
2、如何判斷本機是否已經安裝了該第三方應用?
(1)首先得到該程序的包名;
別人的應用程序我怎麼知道他的包名和類名?
- 通過adb裡面看程序裝的所有應用
- 寫一個遍歷程序,獲取所有已安裝的程序,把包名列印出來,新浪微博的包名中應該會帶有sina字眼,如 com.sina.weibo
//獲取已經安裝apk列表
List<PackageInfo> packList = context.getPackageManager().getInstalledPackages(0);
//獲得包名PackageInfo.packageName
(2)然後通過PackageManager判斷是否存在該包的程序 。
android的每一個apk的activity的包的名字都是唯一的,所以可以通過判斷這個activity所在包的名字來判斷是不是該Apk已經安裝
例1:
//以twitter程序為例,假設twitter程序包名為「com.twitter.android」。這時候可用以下代碼來判斷是否被安裝。
//QQ客戶端的包名是"com.tencent.mobileqq"
PackageInfo packageInfo;//PackageInfo所在包為android.content.pm
try {
packageInfo = this.getPackageManager().getPackageInfo("com.twitter.android", 0);
} catch (NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
}
if(packageInfo ==null){
System.out.println("沒有安裝");
}else{
System.out.println("已經安裝");
}
例2:可以封裝到方法里,操作一樣,只是把包名作為參數傳入,返回值為布爾類型
private boolean isPkgInstalled(String pkgName) {
PackageInfo packageInfo = null;
try {
packageInfo = this.getPackageManager().getPackageInfo(pkgName, 0);
} catch (NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
}
if (packageInfo == null) {
return false;
} else {
return true;
}
3、怎麼跳轉?
通過隱式intent跳轉
例3:PackageManager中有getLaunchIntentForPackage這個方法!
//String pkg代表包名,String download代表下載url
final PackageManager pm = context.getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(pkg);
if (null == intent) {//沒有獲取到intent
if (!TextUtils.isEmpty(downoad)) {//跳轉到下載第三方應用界面
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(downoad)));
}
} else {
context.startActivity(intent);
}
例4:在我們自己的程序中調用其他程序時往往要檢查手機有沒有安裝該軟體後再做相應操作,如沒有安裝,用intent將用戶引導至android market去下載該程序,如已安裝則打開該程序,並傳入參數和調用其功能。
//下面介紹怎麼判斷手機已安裝某程序的方法:
private boolean isAvilible(Context context, String packageName){
final PackageManager packageManager = context.getPackageManager();//獲取packagemanager
List< packageInfo> pinfo = packageManager.getInstalledPackages(0);//獲取所有已安裝程序的包信息
List<String> pName = new ArrayList<String>();//用於存儲所有已安裝程序的包名
//從pinfo中將包名字逐一取出,壓入pName list中
if(pinfo != null){
for(int i = 0; i < pinfo.size(); i++){
String pn = pinfo.get(i).packageName;
pName.add(pn);
}
}
return pName.contains(packageName);//判斷pName中是否有目標程序的包名,有TRUE,沒有FALSE
}
//下面是調用該方法進行判斷後的邏輯:
//已安裝,打開程序,需傳入參數包名:"com.skype.android.verizon"
if(isAvilible(this, "com.skype.android.verizon")){
Intent i = new Intent();
ComponentName cn = new ComponentName("com.skype.android.verizon",
"com.skype.android.verizon.SkypeActivity");
i.setComponent(cn);
startActivityForResult(i, RESULT_OK);
}
//未安裝,跳轉至market下載該程序
else {
Uri uri = Uri.parse("market://details?id=com.skype.android.verizon");//id為包名
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
}
參考鏈接:http://www.eoeandroid.com/thread-152763-1-1.html?_dsign=2242c74c
4、跳轉後呢?
如何在android應用程序中啟動其他apk程序,被啟動程序退出後返回之前的程序?
//你只需要在A中打開B,並為B設置 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//不做對A的關閉處理finish() 這樣就可以了
Intent intent=new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(new ComponentName(objAppClassName, mainActivity));
context.startActivity(intent);
例5:原始跳轉方法,要包名和類名(通過ComponentName),後來可以只要包名…
Android 開發有時需要在一個應用中啟動另一個應用,比如Launcher載入所有的已安裝的程序的列表,當點擊圖標時可以啟動另一個應用。
一般我們知道了另一個應用的包名和MainActivity的名字之後便可以直接通過如下代碼來啟動:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
但是更多的時候,我們一般都不知道應用程序的啟動Activity的類名,而只知道包名,我們可以通過ResolveInfo類來取得啟動Acitivty的類名。
下面是實現代碼:
private void openApp(String packageName) {
PackageInfo pi = getPackageManager().getPackageInfo(packageName, 0);
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null ) {
String packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
}
}
⑼ 求助!如何在安卓手機里下載第三方軟體
安卓系統的游戲和其他運用軟體的下載和安裝一般有2種方式:
第一種直接在網站或者論壇上下載,後綴名為APK的安裝程序,然後復制到在機器上,用機器自帶的APK安裝器安裝後就可以使用了;
第二種是先在電腦上安裝第3方輔助軟體,常用的有91手機助手、豌豆夾、G蛋等,我自己用的是91手機助手,就用它來說明。安裝好以後,先運行軟體,再用USB把機器和電腦聯機,軟體會自動識別機器,這樣你就可以用輔助軟體91手機助手,按功能或者類別來搜你想要的游戲和軟體,找到可以用91手機助手下載,下載完了91手機助手會自動安裝(第一種方式下載的安裝文件,也可以用91手機助手安裝)
有少數情況遇見,下載的文件是ZIP等格式的壓縮文件,解壓後無APK文件,這種情況下把壓縮文件的後綴名改為APK,再安裝即可。
根據個人經驗可能是存在不兼容的原因,有時1種方式不能成功安裝,可以試著用另外的方式下載安裝,或者可以換個輔助軟體下載安裝。
希望對你有幫助,望採納。如有疑問請追問