| 关键词: 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了。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|