【问题标题】:Android permission.INTERACT_ACROSS_USERS_FULL安卓权限。INTERACT_ACROSS_USERS_FULL
【发布时间】:2015-03-23 22:07:41
【问题描述】:

我在 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

有什么帮助吗?

【问题讨论】:

  • @offset 你有没有让这个工作?
  • @user1147688 我不记得了……

标签: android permissions


【解决方案1】:

java.lang.SecurityException: Permission Denial: get/set setting for 用户要求以用户 -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"/>

【讨论】:

  • 不,不幸的是bug又发生了……在哪里添加这一行?
  • android:protectionLevel 是 的有效属性。你在 上都有它来自@Commonsware Sir
  • 喜欢吗? &lt;uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature" /&gt;
  • 签名不是你可以通过添加它来获得的。它由 OEM 签名
【解决方案2】:

总结this 的答案,并查看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

然后要了解android:protectionLevel="signature" 的含义,您必须阅读有关permission-element 的页面。总结在表中:

因此,您需要在 AndroidManifest.xml 中执行的操作很大程度上取决于您需要支持的 API,因为更高的 > 23 API 还需要 android:permissionGroup= definition,以获得非正常(“危险”)权限...

也很高兴知道(@CommonsWare)

为了能够持有INTERACT_ACROSS_USERS,您的应用必须由固件的签名密钥签名必须安装在系统分区上。 p>

为了能够持有INTERACT_ACROSS_USERS_FULL,您的应用必须使用固件的签名密钥进行签名。

【讨论】:

  • 我一直在阅读有关问题原因的信息,但不是解决方案。解决办法是什么?
  • @sudocoder 解决方案是(如上面两句话所示)用设备制造商(或操作系统提供商)OEM 密钥签署您的应用程序!如果这还不够,请发布一个新的 SO 问题,或者查看Android specific SE
  • 公平,这两句话是一个解决方案。但是这个解决方案如何扩展? eg:如果我用三星密钥签名,下载我的应用程序的华为用户不会有同样的问题吗?
  • 当我尝试添加&lt;uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature" /&gt;时,我得到“具有保护级别签名、特权或签名或系统的权限仅授予系统应用程序。如果应用程序是常规的非系统应用程序,它将永远不会能够使用这些权限。”
  • 有没有办法检测应用程序是否在真实用户的帐户上运行,而不是在辅助帐户上运行?
【解决方案3】:

当我使用 billingProcessor.subscribe()billingProcessor.purchase() 时遇到同样的问题,其中两个参数分别为 Activity 和 product_id的产品。我传递了 product_id 的值为空

请确保您传递的值中 product_id 不为空。

【讨论】:

    【解决方案4】:

    一种可能的解决方案是禁用自动填充,但它仅适用于 Android Oreo。检查这个link

    只需将此代码添加到您的应用中:

          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            window.decorView.importantForAutofill = 
            View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS;
        }
    

    如果有的话,重命名 getUserId() 方法。

    【讨论】:

    • wtf,如果有的话,重命名 getUserId() 方法。这条线救救我!为什么!?谢谢你
    【解决方案5】:

    更新设备上的操作系统后遇到它。

    硬重启解决了它。

    【讨论】:

      【解决方案6】:

      这是一个非常奇怪的错误......我从 Java 切换到 Kotlin 或可能从任何 Android Studio 更新后得到了这个错误。我开始从 XML 和 .kt 文件中逐一注释元素,直到我发现错误与任何 userId (错误中提到的)无关,也不是任何 Retrofit 调用,错误是由一个 Spinner 引起的XML 中的元素,当我加载元素时,.kt 文件中没有关于它的内容,只是这样:

      <Spinner
              android:id="@+id/number_people_sp"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:inputType="text" />
      

      所以我删除了它,事情又好了。我认为问题是由元素的一些间距引起的(因为微调器位于选项卡式活动中的片段中),我在长长的错误行中看到了一些关于间距和子度量的内容。

      记住只是检查错误文件中任何可能的小东西,错误可能来自任何东西......

      【讨论】:

        【解决方案7】:

        当我升级我的安卓设备的操作系统版本时,我遇到了同样的问题“android.permission.INTERACT_ACROSS_USERS_FULL”。我尝试清理和重建项目,问题已经解决。

        【讨论】:

          【解决方案8】:

          我在将手机操作系统更新到 Android 9 后立即遇到此错误。除了重置(重新启动)手机和重新启动 Android Studio 对我有用。

          【讨论】:

            【解决方案9】:

            我很幸运地解决了这个问题。我正在使用导致此问题的单例片段实例。当我用new fragment() 替换fragment.getInstance() 调用时,它就像一个魅力。片段不应该用作单例,并且应该带回(如果需要)保存状态。

            【讨论】:

            • 这可能不是 OP 遇到的根本原因
            猜你喜欢
            • 2011-04-06
            • 2017-10-15
            • 2013-10-18
            • 1970-01-01
            • 1970-01-01
            • 2016-02-06
            • 2014-02-16
            • 2016-04-28
            • 1970-01-01
            相关资源
            最近更新 更多