Android 在一個應(yīng)用中啟動另外一個應(yīng)用

Android 中,從當(dāng)前 APP 啟動另外一個 APP 的需求,不是很常見, 但確實(shí)存在著,比如說在某寶還沒有現(xiàn)在這么強(qiáng)大時,支付需要啟動他們的 APP. 再比如說,某米的錢包系統(tǒng),需要和他們的金融 APP 在某些業(yè)務(wù)上是相互依賴的,需要相互啟動.

綜上所述, 從一個 APP 去啟動另外一個 APP 的需求還是有它存在的價值.因此,一下是我在工作和學(xué)習(xí)中總結(jié)的如何通過一個 APP 去啟動另外一個 APP 的方式.

1.通過 APP 啟動另一個 APP

  String packageName = "com.android.calendar";
  Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
  intent.putExtra("type", true);
  startActivity(intent);

上面的代碼,就可以完成從一個 APP 啟動另一個 APP 的業(yè)務(wù)需求, 這里需要注意的是,我們需要檢測一下要啟動的 APP 是否已經(jīng)安裝,如果應(yīng)用未安裝, 則會 NullPointException.

通過這種方式, Android 虛擬機(jī)會自己在目標(biāo) APP 下尋找標(biāo)簽為 android.intent.action.MAIN 的 Activity 啟動.

這里介紹兩種方式,檢測目標(biāo)應(yīng)用是否已經(jīng)安裝

** 方法一: **

Intent intent = getPackageName().getLaunchIntentForPackage(packageName);
if (intent == null) {
  // 這里判斷 Intent 為空, 說明應(yīng)用不存在
}

方法二:

  PackageInfo packageInfo = getPackageManager(0.getPackageInfo(packageName, 0);
  if (packageInfo == null) {
      // 這里如果 packageInfo 為 null, 說明應(yīng)用不存在
  }

2. 打開另外一個 APP 指定的 Activity

    Intent intent = new Intent();
    ComponentName componeneName = new ComponeneName("com.android.calendar", "com.android.calendar.LaunchActivity");
    intent.setComponent(componeneName);
    startActivity(intent);

值得注意:

  • 需要將目標(biāo) Activity 的 android:export="true" 屬性在所屬應(yīng)用的 AndroidMainfest 里設(shè)置為 true, 意思是當(dāng)前 Activity 允許被外部應(yīng)用訪問, 否則會報(bào)錯
  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
  • 在 5.0 以前的設(shè)備上,需要在當(dāng)前的 AndroidMainfest 里也生命目標(biāo)Activity, 否則會報(bào)錯; 但在 5.0 以后的設(shè)備上,就不會報(bào)錯哦
  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?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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