首页 编程 软件学院 查看内容

Android调用第三方App

2014-12-24 18:06 721 0

摘要: private List<Map<String, Object>> list = null;  priva...
关键词: nbsp Intent startActivity Activity Context mPackageManager private 方法 mAllApps new

private List<Map<String, Object>> list = null;  private PackageManager mPackageManager;  private List<ResolveInfo> mAllApps;  private Context mContext;    /**  * 检查系统应用程序,并打开  */  private void openApp(){      //应用过滤条件      Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);      mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);      mPackageManager = mContext.getPackageManager();      mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0);      //按报名排序      Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager));        for(ResolveInfo res : mAllApps){          //该应用的包名和主Activity          String pkg = res.activityInfo.packageName;          String cls = res.activityInfo.name;            // 打开QQ          if(pkg.contains("qq")){              ComponentName componet = new ComponentName(pkg, cls);              Intent intent = new Intent();              intent.setComponent(componet);              intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);              mContext.startActivity(intent);          }      }  }  很多人使用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。intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    这样就可以再新的task里面启动这个Activity了。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部