android 开发,如何从自己的APP打开另一个APP
来源:互联网 发布:健康大数据定义 编辑:程序博客网 时间:2024/05/30 05:13
当你需要从自己的APP中打开另一个APP的时候,网上搜到的方法一般可以打开大部分的APP。
public static void openApp(Activity activity,String packageName) { PackageInfo pi; try { pi = activity.getPackageManager().getPackageInfo(packageName, 0); Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.setPackage(pi.packageName); PackageManager pManager = activity.getPackageManager(); List<ResolveInfo> apps = pManager.queryIntentActivities( resolveIntent, 0); ResolveInfo ri = (ResolveInfo) apps.iterator().next(); if (ri != null) { packageName = ri.activityInfo.packageName; String className = ri.activityInfo.name; Intent intent = new Intent(Intent.ACTION_MAIN); ComponentName cn = new ComponentName(packageName, className); intent.setComponent(cn); activity.startActivity(intent); } } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, "Package Name not found: " + e.getMessage() + ", App is not installed."); } catch (SecurityException e){ SnackBar.newBuilder().activity(activity). text(activity.getString(R.string.permission_denied_to_open)) .build().show(); }}
但是在我自己的实践当中遇到了两个问题,这里总结一下。
第一:无法打开微信(部分机型),但是大部分机型打开微信都会出现无法关闭返回自己APP的问题。这里需要加一句话:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);(打开一个新任务)
第二:无法打开QQ阅读。经过网上求教大大,最后发现是List<ResolveInfo> apps = pManager.queryIntentActivities( resolveIntent, 0);
这里得到的结果不止一个,其中只有一个包含了正确的APP启动aty。需要将代码修改为如下,即可避免上面说的两个问题public static void openApp(Activity activity,String packageName) { PackageInfo pi; try { pi = activity.getPackageManager().getPackageInfo(packageName, 0); Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.setPackage(pi.packageName); PackageManager pManager = activity.getPackageManager(); List<ResolveInfo> apps = pManager.queryIntentActivities( resolveIntent, 0); for(ResolveInfo app: apps){ Log.d(TAG,String.format("%s %s",app.activityInfo.packageName,app.activityInfo.name)); packageName = app.activityInfo.packageName; String className = app.activityInfo.name; Intent intent = new Intent(Intent.ACTION_MAIN); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName(packageName, className); intent.setComponent(cn); try { activity.startActivity(intent); }catch(SecurityException e){ e.printStackTrace(); } } /* ResolveInfo ri = (ResolveInfo) apps.iterator().next(); if (ri != null) { packageName = ri.activityInfo.packageName; String className = ri.activityInfo.name; Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName(packageName, className); intent.setComponent(cn); activity.startActivity(intent); }*/ } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, "Package Name not found: " + e.getMessage() + ", App is not installed."); } catch (SecurityException e){ SnackBar.newBuilder().activity(activity). text(activity.getString(R.string.permission_denied_to_open)) .build().show(); } }
0 0
- android 开发,如何从自己的APP打开另一个APP
- 自定义协议从自己的一个app打开另一个app
- 如何自定义协议从自己的一个app打开另一个app
- 如何自定义协议从自己的一个app打开另一个app
- Android app的activity如何被另一个app打开
- 自己定义协议,从一个app打开另一个app
- 自定义协议从一个App打开另一个App的代码
- iOS 从一个app打开另一个app
- iOS开发-网页/app打开另一个app
- 原生android打开另一个 APP
- 【android】:android如何实现在自己的app里面打开别的app
- Android 如何从一个APP中打开另外一个APP
- Android 如何从一个APP中打开另外一个APP
- 自己的app调用另一个app程序
- 从app中打开另一个应用程序
- 在app或者网页打开自己开发的App(Scheme)
- 点击link打开自己的android app
- Android 通过浏览器打开自己的APP
- 面试配套
- 搭建个人博客完整教程
- 程序设计与算法 第二周测验
- VS中西红柿插件的打开
- hdu 3008 Warcraft
- android 开发,如何从自己的APP打开另一个APP
- android开发笔记————简易随机器的制作
- java js传值乱码
- 面试技能点整理
- javascript ECMAScript 原型
- 自定义UITableViewCell(registerNib: 与 registerClass: 的区别)
- 技能点整理—2
- 夜
- poj 1611 The Suspects