最近项目有个需求,在自己的软件中启动第三方的app,直接启动第三方的app是没有难度的,几行代码就搞定了。这样的话每次都会重新启动第三方应用。但是需求不能中断目标app原有的操作,第三方app原来在什么界面跳转过去就也应该是什么画面。
一开始我把目标软件的主activity的LaunchMode设为“singleInstance”(目标app经常我们也是没法改动的)。启动时Flag设为“FLAG_ACTIVITY_SINGLE_TOP”。芮然每次都能跳转在目标界面,但是每次会出现目标app的启动引导画面。导致体验不好。
后来我想到了桌面软件点击app的时候是不会重新打开一个软件或者出现引导页。我就去找了桌面启动app的代码,实现了所需的效果:
Intent intent = new Intent();
intent = getAppOpenIntentByPackageName(MainActivity.this,"目标软件package");
startActivity(intent);
public static Intent getAppOpenIntentByPackageName(Context context, String packageName){
String mainAct = null;
PackageManager pkgMag = context.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED|Intent.FLAG_ACTIVITY_NEW_TASK);
List<ResolveInfo> list = pkgMag.queryIntentActivities(intent,
PackageManager.GET_ACTIVITIES);
for (int i = 0; i < list.size(); i++) {
ResolveInfo info = list.get(i);
if (info.activityInfo.packageName.equals(packageName)) {
mainAct = info.activityInfo.name;
break;
}
}
if (TextUtils.isEmpty(mainAct)) {
return null;
}
intent.setComponent(new ComponentName(packageName, mainAct));
return intent;
}
目标主Activity的LaunchMode最好设为“singletop”
网友评论