Android权限.INTERACT_ACROSS_USERS_FULL

off*_*set 33 permissions android

我在android中有一个大型应用程序.

应用程序不时崩溃,错误不明确.我不确切知道何时以及为何会发生这种情况.

java.lang.SecurityException: Permission Denial: get/set setting for user asks
to run as user -2 but is calling from user 0; this requires 
android.permission.INTERACT_ACROSS_USERS_FULL
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

Int*_*iya 13

java.lang.SecurityException:Permission Denial:用户的get/set设置要求以用户-2运行,但是从用户0调用; 这需要android.permission.INTERACT_ACROSS_USERS_FULL

android:protectionLevel="signature"在清单中添加此内容.

有关详细信息,请查看 Permission-Element

喜欢:

<permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature"/>
Run Code Online (Sandbox Code Playgroud)

  • 签名不是你可以通过添加它来获得的。它由 OEM 签名 (3认同)
  • 像那样?`<uses-permission android:name ="android.permission.INTERACT_ACROSS_USERS_FULL"android:protectionLevel ="signature"/>` (2认同)

not*_*bit 11

总结一下这个答案,并查看UserHandle.java的来源,我们看到了框架用户id的含义.

# | @UserIdInt            | Value  | Status     | Description |
# | --------------------- | ------ | ---------- | ------------| 
# | USER_OWNER            | 0      | deprecated | "owner" user of the device
# | USER_SYSTEM           | 0      | ok         | "system" user of the device
# | USER_ALL              | -1     | ok         | ALL users on the device
  | USER_CURRENT          | -2     | ok         | the currently active user
# | USER_CURRENT_OR_SELF  | -3     | ok         | id from which we would like to send to the current user
# | USER_NULL             | -10000 | ok         | An undefined user id
Run Code Online (Sandbox Code Playgroud)

然后要了解具体android:protectionLevel="signature"含义,您必须阅读有关permission-element的页面.表中总结了哪些内容:

在此输入图像描述

因此,您需要做的事情AndroidManifest.xml很大程度上依赖于您需要支持的API,因为更高> 23的API也需要android:permissionGroup= 定义,非正常("危险")权限......

也很高兴知道(通过@CommonsWare)

为了能够保持INTERACT_ACROSS_USERS,您的应用程序已被签署通过固件的签名密钥或者它必须在系统分区上安装.

为了能够容纳INTERACT_ACROSS_USERS_FULL,您的应用必须通过固件的签名密钥进行签名.

  • 我一直在阅读有关问题的原因,而不是解决方案。解决办法是什么? (3认同)
  • 公平,这两句话就解决了。但是这个解决方案如何扩展?例如:如果我用三星密钥签名,下载我的应用程序的华为用户不会有同样的问题吗? (2认同)
  • 当我尝试添加 `&lt;uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature" /&gt;` 我得到“具有保护级别签名、特权或签名或系统的权限仅授予系统应用程序“如果一个应用程序是一个普通的非系统应用程序,它将永远无法使用这些权限。” (2认同)
  • 有没有办法检测应用程序是否在真实用户的帐户上运行,而不是在辅助帐户上运行? (2认同)