欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

安卓通过app之间的跳转

程序员文章站 2024-03-15 11:22:47
...

我们都知道安卓开发中经常会从当前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。