我有一个root设备,即Galaxy S3 I9300,基于Android 4.3的基于三星股票的ROM。
运行我正在使用此设备的应用时,我从未遇到任何问题。
从昨天开始(我没有更改设备上的任何内容),每次打开应用程序时,它会显示很短的时间,关闭自身而没有任何崩溃对话框,但它显示下一个日志:
01-30 09:27:18.325: E/DatabaseUtils(2366): Writing exception to parcel
01-30 09:27:18.325: E/DatabaseUtils(2366): 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
01-30 09:27:18.325: E/DatabaseUtils(2366): at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13140)
01-30 09:27:18.325: E/DatabaseUtils(2366): at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2038)
01-30 09:27:18.325: E/DatabaseUtils(2366): at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:607)
01-30 09:27:18.325: E/DatabaseUtils(2366): at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
01-30 09:27:18.325: E/DatabaseUtils(2366): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
01-30 09:27:18.325: E/DatabaseUtils(2366): at android.os.Binder.execTransact(Binder.java:388)
01-30 09:27:18.325: E/DatabaseUtils(2366): at dalvik.system.NativeStart.run(Native Method)
它甚至没有得到扩展Application的类的代码......
似乎这个问题非常普遍(许多人已经报道过这个问题),但我找不到任何解决方案以及为什么会出现这种情况,除了拥有一个有根设备。
人们还说这里写的权限实际上是一个系统权限,但我从来没有听说过它,更不用说使用它了(甚至不确定它是什么)。
问题是,我正在处理的应用程序没有与root相关的任何内容,而且它在几天前就已经运行了。
我尝试重新安装ROM(Omega ROM v54)并禁用与xposed框架相关的任何内容。它没有帮助。
如何解决此问题?我怎么知道其他用户不会有这个问题?
它甚至与root设备有关吗?
答案 0 :(得分:1)
01-30 09:27:18.325: E/DatabaseUtils(2366): 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
此错误来自您在应用中get/set
任何用户/系统设置的位置。此特定错误日志显示您的设置get/set
(来自您的应用代码)正在从用户0(USER_OWNER
)进行调用,但您正在更改的设置是针对用户-2({{1 }})。
您无法更改其他用户'没有权限USER_CURRENT
的设置。
您可能没有考虑在代码中使用不同的用户ID(在调用userID和设置所针对的用户ID之间)以及使用不正确的用户ID调用android.permission.INTERACT_ACROSS_USERS_FULL
设置的情况(I我不知道为什么他们在发生这种情况时会有所不同 - 例如,当设备上有多个用户帐户时可能会发生这种情况。
您需要修改代码以将正确的userID转换为逻辑,并为相应的userID调用设置set/get
(调用用户ID和修改设置的用户ID应该相同)。< / p>
答案 1 :(得分:0)
你可以尝试将apk移动到/ system / app /并检查它是否有效,因为它将以用户0的形式执行。之后你可以比较两个日志(工作一个和常规一个)来查看该应用程序是否停止。
从你的shell安装它:
adb remount
adb push yourApp.apk /system/app/
adb reboot
答案 2 :(得分:0)
将apk
移至/system/app/
。它不会以用户0的形式执行,但它允许您使用此权限:
android.permission.INTERACT_ACROSS_USERS_FULL
答案 3 :(得分:0)
我在Android Wear手表上遇到过这种SecurityException,它发生在我执行通知操作时。
我也无法复制它,但注意到,当我使用IDE或adb install
重新安装应用程序时,它才会发生。我从来没有在我的Google Play密钥签名的正确版本上看到它。