热搜:前端 nest neovim nvim

Android 11以上如何通过包名拉起App

lxf2023-06-23 03:35:14

关键词: queries、QUERY_ALL_PACKAGES 、getLaunchIntentForPackage

需求:通过一个app包名,可以打开包名对应的app

一、实现方案:

Android 11 以下(kotlin):

Android 11以上如何通过包名拉起App

Android 11以上(包含11)(kotlin):

  1. AndroidManifest中注册清单,声明包可见性: Android 11以上如何通过包名拉起App 不过这种方式只能申请过定的包名,如果我们想打开的包名是不确定的就没有办法解决了,不慌,还有一种办法,那就是申请所有软件包的可见性,不过这个是权限比较大的,一般是应用宝或者googleplay之类的APP有这个权限,普通的应用包加上这个权限,会导致在应用市场审核不通过。

Android 11以上如何通过包名拉起App

  1. 已经声明了软件包可见性需求,就可以拉起app了。原因是:Android11及以上,谷歌权限收紧,调用getLaunchIntentForPackage时候,内部实现无法根据包名查询到对应activity名称了,所以获取的intent是null,也就是拉不起来了,声明后就可以查看了。

Android 11以上如何通过包名拉起App

二、以下是谷歌文档参考:

1、根据包名打开App的调用Api:

Android 11以上如何通过包名拉起App

2、官方文档对于声明软件包可见性需求:

在创建应用时,请务必考虑您的应用打算访问的已在设备上安装的一组其他应用。如果您的应用以 Android 11(API 级别 30)或更高版本为目标平台,在默认情况下,系统会自动让部分应用对您的应用可见,但会过滤掉其他应用。本指南将介绍如何让上述其他应用对您的应用可见。

如果您的应用以 Android 11 或更高版本为目标平台,并且需要与应用(自动可见的应用除外)交互,请在您应用的清单文件中添加 <queries> 元素。在 <queries> 元素中,按软件包名称、按 intent 签名或按 Provider 授权指定其他应用,如以下部分所述。

## 注意:如果您在应用的清单中声明了 <package> 元素,则与该软件包名称关联的应用会出现在对 PackageManager 进行的任何与该应用的组件匹配的查询的结果中。

3、所有应用(不推荐)可见性声明

在极少数情况下,您的应用可能需要查询设备上的所有已安装应用或与之交互,不管这些应用包含哪些组件。为了允许您的应用看到其他所有已安装应用,系统会提供 QUERY_ALL_PACKAGES 权限。

下面列出了适合添加 QUERY_ALL_PACKAGES 权限的用例的一些示例:

  • 无障碍应用
  • 浏览器
  • 设备管理应用
  • 安全应用
  • 防病毒应用

不过,在绝大多数情况下,可以通过以下方式实现您应用的用例:与一组自动可见的应用交互,并在您的清单文件中声明您的应用需要访问的其他应用。为了尊重用户隐私,您的应用应请求应用正常工作所需的最小软件包可见性。

这项来自 Google Play 的政策更新为需要 QUERY_ALL_PACKAGES 权限的应用提供了相关准则。

4、了解自动可见的软件包

系统会自动让部分应用对您的应用可见,以便您的应用可与其交互,而无需声明 <queries> 元素。此行为有助于支持基本功能和常见用例。

注意:如果您的应用以 Android 10(API 级别 29)或更低版本为目标平台,那么全部应用均会自动对您的应用可见。

4.1 自动可见的应用类型

尤其要注意,即使您的应用以 Android 11(API 级别 30)或更高版本为目标平台,以下类型的应用也始终对您的应用可见:

  • 您自己的应用。
  • 实现 Android 核心功能的某些系统软件包,例如媒体提供程序。
  • 安装了您应用的应用。
  • 使用 startActivityForResult() 方法在您的应用中启动 activity 的任何应用,正如如何获取 activity 的结果这一指南中所述。
  • 启动或绑定到您应用中的某项服务的任何应用。
  • 访问您应用中的 Content Provider 的任何应用。
  • 具有 Content Provider 的任何应用,其中您的应用已被授予 URI 权限来访问该 Content Provider。
  • 接收您应用的输入的任何应用。这种情况仅适用于您的应用作为输入法应用提供输入。

此外,您可以使用隐式或显式 intent 来启动另一应用的 activity,无论这个应用是否对您的应用可见。

4.2自动可见的系统软件包

实现 Android 核心功能的某些系统软件包会自动对您的应用可见,即使您的应用以 Android 11 或更高版本为目标平台也是如此。这组特定的软件包取决于运行您应用的设备。

如需查看特定设备的完整软件包列表,请在开发机器上的终端中运行以下命令:

Android 11以上如何通过包名拉起App 在命令输出中,找到 forceQueryable 部分。本部分包含设备上自动对您的应用可见的软件包列表。

本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!