安卓通过app之间的跳转

来源:互联网 发布:nessus windows 编辑:程序博客网 时间:2024/05/20 18:41

我们都知道安卓开发中经常会从当前APP跳转到另一个APP。比如支付的时候你可能从一个团购网如:大众点评,付费时跳到另一个支付APP如:支付宝。我一般都是用包名跳转,前提是你要知道你要跳转APP的包名。


通过包名直接打开APP


 public static void startAPP(String packagename, Context context) {        // 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等        PackageInfo packageinfo = null;        try {            packageinfo = context.getPackageManager().getPackageInfo(packagename, 0);        } catch (PackageManager.NameNotFoundException e) {            e.printStackTrace();        }        if (packageinfo == null) {            DialogNotileUtil.show(context, "此程序未安装");            return;        }        // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent        Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);        resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);        resolveIntent.setPackage(packageinfo.packageName);        // 通过getPackageManager()的queryIntentActivities方法遍历        List<ResolveInfo> resolveinfoList = context.getPackageManager()                .queryIntentActivities(resolveIntent, 0);        ResolveInfo resolveinfo = resolveinfoList.iterator().next();        if (resolveinfo != null) {            // packagename = 参数packname            String packageName = resolveinfo.activityInfo.packageName;            // 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]            String className = resolveinfo.activityInfo.name;            // LAUNCHER Intent            startAPP(packageName, className, context);        }    }
    /*通过包名和类名打开APP*/    public static void startAPP(String packageName, String className, Context context) {        Intent intent = new Intent(Intent.ACTION_MAIN);        intent.addCategory(Intent.CATEGORY_LAUNCHER);        // 设置ComponentName参数1:packagename参数2:MainActivity路径        ComponentName cn = new ComponentName(packageName, className);        intent.setComponent(cn);        context.startActivity(intent);    }
    public static void starAPP(String packagename, Context context) {        // 这里的packname就是从上面得到的目标apk的包名        Intent resolveIntent = context.getPackageManager().getLaunchIntentForPackage(packagename);        // 启动目标应用        context.startActivity(resolveIntent);    }


上面是打开APP的第二种方式,和第一种不同的是,它会新开个栈。第一种它是覆盖原APP。

原创粉丝点击