Android调用第三方App
2024-10-01 09:08:28
- 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了。
最新文章
- 2000条你应知的WPF小姿势 基础篇<;74-77 WPF 多窗口Tips>;
- C 语言学习:班级同学的博客地址列表
- Nodejs的第一个页面
- 夺命雷公狗---2016-linux---3之目录一般作用
- linux 时钟源初步分析linux kernel 时钟框架详细介绍
- poj - 3723 Conscription(最大权森林)
- 语法:MySQL中INSERT INTO SELECT的使用(转)
- algorithms中计算时间的渐近表示
- Java NIO内存映射---上G大文件处理(转)
- git clone出现SSL错误
- [BZOJ1385] [Baltic2000] Division expression (数学)
- 【Qt编程】Qt学习笔记<;二>;
- 转摘: MySQL详解--锁
- dubbo服务暴露
- VMware Workstation Pro网络配置(WiFi配置等)
- 朝花夕拾 - 应用了6年久经实际项目考验未变的代码 - singleton模式
- Android 滑动定位+吸附悬停效果实现
- Python框架学习之用Flask创建一个简单项目
- CentOS7 设置软件镜像源
- 学习笔记6—pandas中ix,loc,iloc有什么区别?