Android permission.INTERACT_ACROSS_USERS_FULL
Android permission.INTERACT_ACROSS_USERS_FULL
我在 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
有什么帮助吗?
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
将此 android:protectionLevel="signature"
添加到您的清单中。
更多详情,您可以查看Permission-Element
喜欢:
<permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature"/>
总结 this answer, and looking at the sources of 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 的页面。 table 中总结:
因此,您需要在 AndroidManifest.xml
中做什么很大程度上取决于您需要支持的 API,因为更高的 > 23 API 也需要 android:permissionGroup=
definition,对于非正常("dangerous")权限...
也很高兴知道(来自@CommonsWare)
为了能够保持 INTERACT_ACROSS_USERS
,您的应用必须通过固件的签名密钥或签名它有安装在系统分区。
为了能够保持 INTERACT_ACROSS_USERS_FULL
,您的应用必须由固件的签名密钥签名。
我在使用 billingProcessor.subscribe() 或 billingProcessor.purchase() 时遇到了同样的问题参数为产品的Activity和product_id。我传递了 product_id 的值是空的。
请确保您在 product_id 中传递的值不为空。
一种可能的解决方案是禁用 auto-fill,但它仅适用于 Android Oreo。检查这个
只需将此代码添加到您的应用中即可:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
window.decorView.importantForAutofill =
View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS;
}
并重命名 getUserId() 方法(如果有)。
我很幸运地解决了这个问题。我正在使用导致此问题的单例片段实例。当我用 new fragment()
替换 fragment.getInstance()
调用时,它就像一个魅力。片段不应该被用作单例,应该用保存的状态带回来(如果需要)。
这是一个非常奇怪的错误...我在从 Java 切换到 Kotlin 或可能从任何 Android Studio 更新后遇到了这个错误。我开始从 XML 和 .kt 文件中一个一个地评论元素,直到我发现该错误与任何 userId(在错误中提到)无关,也与任何 Retrofit 调用无关,错误是由 XML 中的一个 Spinner 元素引起,当我加载这些元素时,.kt 文件中没有任何内容,只是这样:
<Spinner
android:id="@+id/number_people_sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
所以我删除了它,一切又好了。我认为问题是由元素的某些间距引起的(因为该微调器位于选项卡式 Activity 中的片段中)并且我在长长的错误行中看到了有关间距和子度量的内容。
记住只是检查错误文件中任何可能的小东西,错误可能来自任何东西......
当我升级 android 设备的 OS 版本时,我遇到了同样的问题“android.permission.INTERACT_ACROSS_USERS_FULL”。我尝试清理并重建项目,问题已经解决。
在设备上更新 OS 后只需 运行 即可。
硬重启解决了。
我在将 phone OS 更新为 Android 后立即遇到此错误 9. 除了重置(重新启动)phone 和重新启动 Android Studio 之外什么都没有对我来说。
我在 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
有什么帮助吗?
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
将此 android:protectionLevel="signature"
添加到您的清单中。
更多详情,您可以查看Permission-Element
喜欢:
<permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature"/>
总结 this answer, and looking at the sources of 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 的页面。 table 中总结:
因此,您需要在 AndroidManifest.xml
中做什么很大程度上取决于您需要支持的 API,因为更高的 > 23 API 也需要 android:permissionGroup=
definition,对于非正常("dangerous")权限...
也很高兴知道(来自@CommonsWare)
为了能够保持 INTERACT_ACROSS_USERS
,您的应用必须通过固件的签名密钥或签名它有安装在系统分区。
为了能够保持 INTERACT_ACROSS_USERS_FULL
,您的应用必须由固件的签名密钥签名。
我在使用 billingProcessor.subscribe() 或 billingProcessor.purchase() 时遇到了同样的问题参数为产品的Activity和product_id。我传递了 product_id 的值是空的。
请确保您在 product_id 中传递的值不为空。
一种可能的解决方案是禁用 auto-fill,但它仅适用于 Android Oreo。检查这个
只需将此代码添加到您的应用中即可:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
window.decorView.importantForAutofill =
View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS;
}
并重命名 getUserId() 方法(如果有)。
我很幸运地解决了这个问题。我正在使用导致此问题的单例片段实例。当我用 new fragment()
替换 fragment.getInstance()
调用时,它就像一个魅力。片段不应该被用作单例,应该用保存的状态带回来(如果需要)。
这是一个非常奇怪的错误...我在从 Java 切换到 Kotlin 或可能从任何 Android Studio 更新后遇到了这个错误。我开始从 XML 和 .kt 文件中一个一个地评论元素,直到我发现该错误与任何 userId(在错误中提到)无关,也与任何 Retrofit 调用无关,错误是由 XML 中的一个 Spinner 元素引起,当我加载这些元素时,.kt 文件中没有任何内容,只是这样:
<Spinner
android:id="@+id/number_people_sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
所以我删除了它,一切又好了。我认为问题是由元素的某些间距引起的(因为该微调器位于选项卡式 Activity 中的片段中)并且我在长长的错误行中看到了有关间距和子度量的内容。
记住只是检查错误文件中任何可能的小东西,错误可能来自任何东西......
当我升级 android 设备的 OS 版本时,我遇到了同样的问题“android.permission.INTERACT_ACROSS_USERS_FULL”。我尝试清理并重建项目,问题已经解决。
在设备上更新 OS 后只需 运行 即可。
硬重启解决了。
我在将 phone OS 更新为 Android 后立即遇到此错误 9. 除了重置(重新启动)phone 和重新启动 Android Studio 之外什么都没有对我来说。