Android通過App啟動(dòng)另一個(gè)APP

在開發(fā)項(xiàng)目中會(huì)遇到這樣的需求,通過一個(gè)應(yīng)用啟動(dòng)另外一個(gè)應(yīng)用或者打開另一個(gè)應(yīng)用的某個(gè)Activity。雖然說我還沒遇到過,但突然想到這個(gè)問題,就自己寫了個(gè)Demo測(cè)試了一下,在這里做一下簡單總結(jié)。

1、通過APP啟動(dòng)另一個(gè)APP

直接上代碼,

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

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

如果手機(jī)上已經(jīng)安裝了另一個(gè)APP直接就能夠打開了。

2、打開另一個(gè)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  可以在這里提示用戶沒有安裝應(yīng)用或找不到指定Activity,或者是做其他的操作
    }

這里有兩點(diǎn)需要注意
1、需要將目標(biāo)Activity的android:exported="true"屬性在所屬應(yīng)用AndroidMainfest里設(shè)置為true,意思是當(dāng)前Activity可以被外部應(yīng)用訪問,否則會(huì)報(bào)下面的錯(cuò)誤

  Caused by: java.lang.SecurityException: Permission Denial: starting  Intent 
  { cmp=com.example.fm/.MainFragmentActivity (has extras) } from ProcessRecord
  {39282a97 11545:com.xing.toolbardemo1/u0a71}  (pid=11545,     uid=10071) not exported from uid 10067

2、需要在當(dāng)前應(yīng)用的AndroidMainfest里也聲明目標(biāo)Activity,否則會(huì)報(bào)下面的錯(cuò)誤
(5.0以后好像不會(huì)有這個(gè)錯(cuò),我用的了兩個(gè)5.0一下的測(cè)試機(jī)都報(bào)錯(cuò)了)

   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? 

在清單文件里聲明目標(biāo)Activity就OK了

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

這樣我們就實(shí)現(xiàn)了通過一個(gè)APP打開另一個(gè)APP的功能啦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容