Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 兩個啟動入口 打開了 兩個應用程序的實例的解決辦法

android 兩個啟動入口 打開了 兩個應用程序的實例的解決辦法

編輯:關於Android編程

首先,你可以嘗試在給intent設置一些屬性。


[java] 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 

如果這樣還不行,可以繼續往下讀。www.2cto.com


在我的應用中,會有一個按鈕,用戶可以通過點擊按鈕來啟動網易新聞。因為不知道網易新聞的具體的主Activity名,首先想到的就是使用通過使用包名來啟動網易新聞。得到網易新聞包名的方式很簡單,使用android的ddms工具就可以查看到。包名是:"com.netease.newsreader.activity"。

第一次寫的按鈕的點擊事件為:


[java] 
Intent startapp = mContext.getPackageManager().getLaunchIntentForPackage("com.netease.newsreader.activity"); 
startapp.addCategory(Intent.ACTION_MAIN); 
startapp.addCategory(Intent.CATEGORY_LAUNCHER); 
startapp.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
mContext.startActivity(startapp); 

以為這樣就輕松搞定了。後來測試發現,點擊我這個按鈕進入的網易新聞和點擊網易新聞自帶的快捷方式進入的網易新聞不是同一個。很納悶,一直都找不到原因,後來都開始懷疑是網易新聞自身的原因了。最後,一次偶然的嘗試,讓我找到了該問題的解決方案。

[java]
Intent intent = new Intent("android.intent.action.MAIN"); 
intent.addCategory("android.intent.category.LAUNCHER"); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
intent.setComponent(ComponentName.unflattenFromString("com.netease.newsreader.activity/.MainIndexActivity")); 
mContext.startActivity(intent); 

相信大家也發現不一樣的地方了。對了,就是不通過包名來啟動,而是通過網易新聞的主activity來啟動,就可以解決這個問題。
至於如何知道應用的主Activity,方法有很多,可以通過log過濾ActivityManager來看,也可以通過反編譯來看。
作者:g475266696

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved