Home

fangxiaogang

我可以!

Home About Github Email

2017-05-02
Android 跳转第三方app重复启动问题

Android-跳转第三方app重复启动问题

最近项目有个需求,在自己的软件中启动第三方的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”

fangxiaogang

scribble

Home About Github Email