android 从应用中打开第三方应用

打开第三方应用之前需要先判断该应用是否存在,代码如下:

复制代码
public boolean isAppInstalled(Context context, String packageName) {
        PackageManager packageManager = context.getPackageManager();
        try {
            packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }

如果判断第三方应用存在则可以进行应用打开了,代码如下:

复制代码
 if (isAppInstalled(MainActivity.this, packageName)) {
                Intent intent = new Intent();
                ComponentName comp = new ComponentName("第三方应用包名", "第三方应用第一个activity");
                intent.setComponent(comp);
                intent.setAction("android.intent.action.MAIN");
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
            } else {
                Toast.makeText(MainActivity.this, "请先安装该应用", Toast.LENGTH_SHORT).show();
            }

但是我使用中发现一个问题,使用判断第三方应是否存在时在Android高版本系统会一直获取不到。后来研究发现需要在AndroidManifest.xml中新增以下权限以及queries

复制代码
 <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
        tools:ignore="QueryAllPackagesPermission" />


<queries>
       <package android:name="第三方应用包名" />
</queries>
复制代码
相关推荐
AI人工智能+电脑小能手6 分钟前
【大白话说Java面试题 第156题】【06_Spring篇】第16题:Spring 用到了哪些设计模式?
java·spring·设计模式·代理模式·工厂模式
gugucoding10 分钟前
28. 【C语言】通用数据操作:`void *` 与类型无关编程
c语言·开发语言
曹牧13 分钟前
XML 解析过程中遇到 `org.xml.sax.SAXParseException
java·开发语言
光影少年25 分钟前
RN 架构:JS层、原生桥接层、原生渲染层 通信原理
开发语言·javascript·架构
用户693717500138437 分钟前
AI Agent 里的 Loop 到底是什么?
android·前端·后端
ALex_zry41 分钟前
C++26 std::inplace_vector 详解:零堆分配的定容向量
开发语言·c++
海天鹰1 小时前
安卓分割空字符串数组长度为1
android
许彰午1 小时前
77_Python数据清洗实战技巧
开发语言·python
落寞的电源1 小时前
Delegate = Object + MethodInfo
开发语言·数据库·c#
你怎么知道我是队长1 小时前
JavaScript的介绍
开发语言·javascript·ecmascript