【问题标题】:What does QUERY_ALL_PACKAGES permission do?QUERY_ALL_PACKAGES 权限有什么作用?
【发布时间】:2020-06-26 00:20:01
【问题描述】:

Android R Preview 1 引入了一个名为 QUERY_ALL_PACKAGES 的新权限。许可文件说明如下:

允许查询设备上的任何普通应用,无论清单声明如何。

有没有人弄清楚这实际上是做什么的?

我尝试在模拟器镜像上运行以下命令,但权限对其中任何一个都没有影响:

  • packageManager.queryIntentActivities(intent, 0)
  • packageManager.getInstalledPackages(0)

【问题讨论】:

  • 您能否详细说明一下您在哪里放置了这个查询和 ACTION_CAPTURE 的这个,您对 SENDTO、SEND TO MULTIPLE 有什么想法吗?

标签: android android-11


【解决方案1】:

即使添加了QUERY_ALL_PACKAGES 权限,您仍然需要将<queries> 过滤器添加到您的AndroidManifest

例如对于启动器应用,它可能是:

<permission android:name="android.permission.QUERY_ALL_PACKAGES" />

<queries>
    <intent>
        <action android:name="android.intent.action.MAIN" />
    </intent>
</queries>

【讨论】:

  • 谢谢,这比接受的答案更容易理解。如果您添加有关权限的作用以及需要在 &lt;queries&gt; 元素中添加的内容的更多详细信息,那么我会将其作为接受的答案。
  • 我们只需要通过Android的PackageManager查询调用组件的packageName,不需要访问app本身。那么为此我们是否还必须在清单中添加查询?提前致谢。
  • 我认为您应该使用 而不是 谷歌使用android.googlesource.com/platform/packages/apps/Bluetooth/+/… 的方式意味着您正在声明/覆盖新的权限,并可能导致安装错误DUPLCAITE_PERMISSION 在低于 Android11 的设备上,如果其他应用程序具有相同的权限。 表示您正在使用预定义的系统权限
【解决方案2】:

Android 11 引入了与包可见性相关的更改。这些更改仅会影响面向 Android 11 的应用。有关这些更改的详细信息,请查看有关 Android 上的包可见性的指南。

https://developer.android.com/training/package-visibility

https://developer.android.com/about/versions/11/privacy/package-visibility

https://developer.android.com/training/package-visibility

就我而言,Cordova-android 10.1.1,targetSdkVersion 30

我加了

 <queries>
                <package android:name="com.google.android.gm" />
                <package android:name="com.facebook.katana" />
                <intent>
                    <action android:name="android.intent.action.VIEW" />
                    <data android:scheme="https" />
                </intent>
                <intent>
                    <action android:name="android.intent.action.DIAL" />
                    <data android:scheme="tel" />
                </intent>
                <intent>
                    <action android:name="android.intent.action.SEND" />
                    <data android:mimeType="*/*" />
                </intent>
            </queries>

在 AndroidManifest.xml 中

【讨论】:

    【解决方案3】:

    他们 cover this more 现在 DP2 出来了。

    引用myself:

    虽然我还没有测试过 在 R DP2 的这一方面,您的应用现在似乎无法找出安装了哪些其他应用, 在一般基础上。引用的例子是queryIntentActivities(),但要使 这确实有效,您需要认真地对PackageManager进行脑叶切除。 您可以将某些包和某些&lt;intent-filter&gt; 列入白名单 在某些用例中尝试通过这种方式获得的结构。而且,这就是 在 DP1 中看到的神秘 QUERY_ALL_PACKAGES 权限开始发挥作用 — 此权限消除了这些新限制。鉴于“寻找 Google Play 为需要此权限的应用程序提供指南”警告,最安全的假设是 如果您尝试使用它,最终您将被禁止进入 Play 商店 机器人。

    因此,您可能想在 DP2 上重新尝试实验。我计划在接下来的几周内做同样的事情。

    【讨论】:

    • 谢谢!我接受了这个答案,因为它链接到官方文档,其中有足够的信息让我让它工作。更新到 DP2 后,我对 queryIntentActivities() 的调用只返回了几个应用程序。我在清单中添加了&lt;queries&gt; 元素以声明我传递给queryIntentActivities() 的意图,然后queryIntentActivities() 再次开始返回所有相关应用程序。
    • 我对某事感到好奇。在需要所有应用程序列表的应用程序(例如家庭启动器应用程序,或根据用户输入对其他应用程序执行操作的实用程序应用程序)上添加被认为危险的权限?或者,这会影响电话 PackageManager.getInstalledApplications() 吗?如果确实有影响,那我们应该怎么做才能在不添加权限的情况下获取已安装的应用程序呢?
    • @FurkanYurdakul:他们在文档中的语言表明请求QUERY_ALL_PACKAGES 需要获得批准(可能通过表单)才能在 Play 商店中分发您的应用程序。启动器应该很少有问题,因为您可以使用&lt;queries&gt; 元素将查询HOME/LAUNCHER 活动的能力列入白名单。我还没有对PackageManager 中的影响和不影响进行完整的测试,但我的猜测是getInstalledApplications() 会受到影响。
    • @Sam 即使我也检查了 Android 11 测试版,但所有软件包列表都来自上述 API。没有看到 android 11 更改文档中提到的任何影响。
    • @El.,自测试版以来我还没有测试过这个,但我想知道这些更改是否仅在您将应用的目标版本更改为 30 时适用?
    【解决方案4】:

    如果应用尝试与另一个应用通信,则应为 Android 11+ 添加此权限,否则这些应用将无法工作/触发

    【讨论】:

      猜你喜欢
      • 2022-08-03
      • 2021-02-21
      • 2012-03-11
      • 2022-08-16
      • 2022-08-10
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多