天天看點

Android通過App啟動另一個APP

1、通過APP啟動另一個APP

直接上代碼,

PackageManager packageManager = getPackageManager();
    if (checkPackInfo(packname)) {
        Intent intent = packageManager.getLaunchIntentForPackage(packname);
        startActivity(intent);
    } else {
        Toast.makeText(MainActivity.this, "沒有安裝" + packname, ).show();
    }

    /**
     * 檢查包是否存在
     *
     * @param packname
     * @return
     */
    private boolean checkPackInfo(String packname) {
        PackageInfo packageInfo = null;
        try {
            packageInfo = getPackageManager().getPackageInfo(packname, );
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return packageInfo != null;
    } 

                

如果手機上已經安裝了另一個APP直接就能夠打開了。

2、打開另一個APP指定的Activity

Intent intent = new Intent();
    //第一種方式
    ComponentName cn = new ComponentName("com.example.fm", "com.example.fm.MainFragmentActivity");
    try {
        intent.setComponent(cn);
        //第二種方式
        //intent.setClassName("com.example.fm", "com.example.fm.MainFragmentActivity");
        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.example.fm/.MainFragmentActivity (has extras) } from ProcessRecord
  {a97 :com.xing.toolbardemo1/u0a71}  (pid=,     uid=) not exported from uid 
                

2、需要在目前應用的AndroidMainfest裡也聲明目标Activity,否則會報下面的錯誤

(5.0以後好像不會有這個錯,我用的了兩個5.0一下的測試機都報錯了)

Caused by: android.content.ActivityNotFoundException: Unable to find 
   explicit activity class {com.example.fm/com.example.fm.MainFragmentActivity}; 
   have you declared this activity in your AndroidManifest.xml? 
                

在清單檔案裡聲明目标Activity就OK了

<activity android:name="com.example.fm.MainFragmentActivity"></activity>
                

這樣我們就實作了通過一個APP打開另一個APP的功能啦。

作者:吾若成瘋

連結:https://www.jianshu.com/p/42ae7066f8f3

來源:簡書

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。