一、得到目標app包名
參考鏈接:https://www.jianshu.com/p/8cc2f0841b14 原作者:亭子青年
- 在模擬器/真機上面安裝“包名查看器”,可以自行上網搜索
- 使用sdk tools下的3個工具進行查看:ddms.bat,monitor.bat,hierarchyviewer.bat,當然也可以通過eclipse中的ddms進行查看,在查看的過程中,你只需要在虛擬機或者真機中打開並操作指定的app,就可以在工具中進行查看
這裏以hierarchyviewer.bat工具爲例
hierarchyviewer.png
3.通過簽名文件獲得
(1)adb shell pm list packages
(2)adb shell ls -al /data/data
4.查看源代碼=》AndroidManifest.xml文件
二、項目app啓動目標app
參考鏈接:https://www.jianshu.com/p/42ae7066f8f3 作者:吾若成瘋
MainActivity.java
(packageName:com.xxx.test.debug)
//點擊按鈕響應
public void click(View view){
//根據包名打開指定app
//app:Pos 包名:com.xxx.test.debug
openTargetApp("com.xxx.test.debug");
}
/*
*啓動設備已安裝的app
*/
public void openTargetApp(String packageName){
//包管理器對象
PackageManager pm = getPackageManager();
//檢查包名
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(packageName,0);
}catch (PackageManager.NameNotFoundException e){
e.printStackTrace();
}
//包名存在則啓動app
if (packageInfo != null){
Intent intent = pm.getLaunchIntentForPackage(packageName);
this.startActivity(intent);
}else{
Toast.makeText(MainActivity.this,"應用程序未安裝",Toast.LENGTH_LONG).show();
}
如果手機上已經安裝了另一個APP直接就能夠打開了。
2、打開另一個APP指定的Activity
(入口Activity:com.xxx.test.ExampleActivity)
Intent intent = new Intent();
//第一種方式
ComponentName cn = new ComponentName("com.xxx.test.debug", "com.xxx.test.ExampleActivity");
try {
intent.setComponent(cn);
//第二種方式
//intent.setClassName("com.xxx.test.debug", "com.xxx.test.ExampleActivity");
intent.putExtra("test", "intent1");
startActivity(intent);
} catch (Exception e) {
//TODO 可以在這裏提示用戶沒有安裝應用或找不到指定Activity,或者是做其他的操作
}
這裏有兩點需要注意
1、需要將目標Activity的android:exported="true"屬性在所屬應用AndroidMainfest裏設置爲true,意思是當前Activity可以被外部應用訪問,否則會報下面的錯誤
Caused by: java.lang.SecurityException: Permission Denial: starting Intent
{ cmp=com.xxx.test.debug/.ExampleActivity (has extras) } from ProcessRecord
{39282a97 11545:com.xing.toolbardemo1/u0a71} (pid=11545, uid=10071) not exported from uid 10067
2、需要在當前應用的AndroidMainfest裏也聲明目標Activity,否則會報下面的錯誤
(測試機爲android5.0以下)
Caused by: android.content.ActivityNotFoundException: Unable to find
explicit activity class {com.xxx.test.debug/com.xxx.test.debug.ExampleActivity};
have you declared this activity in your AndroidManifest.xml?
在清單文件裏聲明目標Activity就OK了
<activity android:name="com.xxx.test.debug.ExampleActivity"></activity>