Android打開設備上已安裝的其它app

一、得到目標app包名

參考鏈接:https://www.jianshu.com/p/8cc2f0841b14  原作者:亭子青年

  1. 在模擬器/真機上面安裝“包名查看器”,可以自行上網搜索
  2. 使用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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章