Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android調用第三方App

Android調用第三方App

編輯:關於Android編程

  1. private List> list = null;
  2. private PackageManager mPackageManager;
  3. private List mAllApps;
  4. private Context mContext;
  5.  
  6. /**
  7. * 檢查系統應用程序,並打開
  8. */
  9. private void openApp(){
  10. //應用過濾條件
  11. Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
  12. mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
  13. mPackageManager = mContext.getPackageManager();
  14. mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0);
  15. //按報名排序
  16. Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager));
  17.  
  18. for(ResolveInfo res : mAllApps){
  19. //該應用的包名和主Activity
  20. String pkg = res.activityInfo.packageName;
  21. String cls = res.activityInfo.name;
  22.  
  23. // 打開QQ
  24. if(pkg.contains(qq)){
  25. ComponentName componet = new ComponentName(pkg, cls);
  26. Intent intent = new Intent();
  27. intent.setComponent(componet);
  28. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  29. mContext.startActivity(intent);
  30. }
  31. }
  32. }

  33. 很多人使用startActivity時候,會碰到如下的異常:

    Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

     

    我曾經也遇到過,不過後來研究了一下之後,明白了原理,記下來,以為碰到同樣困擾的兄弟們解惑。

     

    都知道,Context中有一個startActivity方法,Activity繼承自Context,重載了startActivity方法。如果使用Activity的startActivity方法,不會有任何限制,而如果使用Context的startActivity方法的話,就需要開啟一個新的task,遇到上面那個異常的,都是因為使用了Context的startActivity方法。解決辦法是,加一個flag。

     

    [java] 
    1. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

       

      這樣就可以再新的task裡面啟動這個Activity了。

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