intent打开第三方应用

有时候我们会有在自己的应用中进入另一个第三方应用的需求,首先要知道第三方应用的包名和主activity,很简单遍历一下所有的应用就能拿到了。

    private void go2App(String packageName) {
        if (!isAppInstalled(this, packageName)) {
            ToastUtil.showToast(this, "您没有安装此应用", Toast.LENGTH_LONG);
            return;
        }
        
        String mainAct = null;
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);

        PackageManager manager = this.getPackageManager();
        List<ResolveInfo> list = manager.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)) {
            ToastUtil.showToast(this, "打开失败", Toast.LENGTH_LONG);
        }
//        intent.setComponent(new ComponentName(packageName, mainAct));//也可以使用这种方式
        intent.setClassName(packageName, mainAct);
        startActivity(intent);

    }

    /*
     * check the app is installed
     */
    private boolean isAppInstalled(Context context, String packagename) {
        PackageInfo packageInfo;
        try {
            packageInfo = context.getPackageManager().getPackageInfo(packagename, 0);
        } catch (NameNotFoundException e) {
            packageInfo = null;
            e.printStackTrace();
        }
        if (packageInfo == null) {
            // System.out.println("没有安装");
            return false;
        } else {
            // System.out.println("已经安装");
            return true;
        }
    }

附一个打开qq浏览器的方式,其他应用如果你已经知道了包名和主activity的名称,也可使用这种方式,不过intent的action和Category可能需要改一改。

    private void go2Browser(String url) {
        if (!isAppInstalled(this, "com.tencent.mtt")) {
            ToastUtil.showToast(this, "您没有安装QQ浏览器", Toast.LENGTH_LONG);
            return;
        }
        Uri uri = Uri.parse(url);
        Intent intent = new Intent();
        intent.setAction("android.intent.action.VIEW");
        intent.setClassName("com.tencent.mtt", "com.tencent.mtt.MainActivity");
        intent.setData(uri);
        startActivity(intent);
    }
原文地址:https://www.cnblogs.com/wangyuehome/p/4974116.html