为什么某些权限请求会在没有对话框的情况下立即被拒绝,而其他权限则会提出请求?

问题描述 投票:0回答:1

在空白/擦除的 AVD (AAOS) 上,我有需要接受的权限列表。 当我尝试此操作时,当前仅授予

CAR_SPEED
(我应该接受),所有其他都被拒绝,没有对话框,并且在设置中没有指示它们曾经被请求过。

例如:

android.car.permission.CAR_SPEED
android.car.permission.CAR_MILEAGE
。 当我使用
androidx.car.app.CarContext.requestPermisions
请求这 2 个时,我会收到一个对话框,询问位置访问权限(
android:permissionGroup="android.permission-group.LOCATION"
表示
android.car.permission.CAR_SPEED
)。 接受速度,但不接受里程。注意:里程并不表明自己属于任何组。权限设置方式与

中相同

应用程序的设置中仅显示位置权限请求。如果我再次请求这些,则不会提出任何要求。 它默默地失败并且侦听器显示所有其他权限(本例中的汽车里程)被拒绝。

为什么行为不同?如何确保请求所有权限而不是立即拒绝?

谢谢!

android android-permissions android-automotive
1个回答
0
投票

在Android中,不同的权限有不同的保护级别。这是其中一些的列表。您可以按 CTRL+F 查找您要查找的权限。

这可能会影响它们在运行时被请求时的行为。

对于

android.car.permission.CAR_MILEAGE
,防护等级为
signature|privileged

根据 Android 文档

signature
基本权限类型定义如下:

仅当请求应用程序使用与声明该权限的应用程序相同的证书进行签名时,系统才会授予该权限。如果证书匹配,系统会自动授予权限,无需通知用户或请求用户明确批准。

根据定义,该权限的保护级别意味着它永远不会提示或通知用户。谷歌表示,这是因为这些权限最好不要由用户处理。

privileged
保护级别表示系统应用不受上述限制,自动获取。

假设您不想/没有办法使其成为系统应用程序(通常您不会),并且它默默地失败而不是默默地成功,请确保以下几点:

  1. 在请求之前,请先检查 AndroidManifest.xml 中是否已声明该权限,并且
  2. 确保请求应用程序和声明应用程序使用相同的签名密钥进行签名。如果它们是同一个应用程序,那就是。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.