gpt4 book ai didi

java - SecurityException:权限拒绝

转载 作者:行者123 更新时间:2023-11-30 08:59:45 26 4
gpt4 key购买 nike

背景

我正在开发一款控制屏幕旋转的 Android 应用。 The app is available on the Google Play store .为了控制屏幕旋转,应用程序禁用了 system auto rotation并更改 USER_ROTATION 的值. The source code is available via Mercurial/hg .

问题

虽然该应用程序在我的手机(已获得 root 权限的 Sony Xperia M)上运行良好,但在 friend 的运行 Android 4.3 的三星 Galaxy S3 上却崩溃了。崩溃发生在我的代码之外,所以我没有在 Google Play 商店中收到崩溃报告,并且堆栈跟踪仅显示我无权访问的外部代码。

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_FULLat android.os.Parcel.readException(Parcel.java:1431)at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)at android.content.ContentProviderProxy.call(ContentProviderNative.java:602)at android.provider.Settings$NameValueCache.getStringForUser(Settings.java:934)at android.provider.Settings$System.getStringForUser(Settings.java:1162)at android.provider.Settings$System.getIntForUser(Settings.java:1232)at com.android.internal.policy.impl.WindowOrientationListener$ScreenOrientationEventListenerImpl.onSensorChanged(WindowOrientationListener.java:501)at android.hardware.SystemSensorManager$SensorE

此堆栈跟踪表明系统自动旋转仍在运行。它还显示操作系统代码在接收到屏幕方向更改事件后正尝试以特定用户身份读取 int 系统设置。所以我怀疑问题与我禁用 ACCELEROMETER_ROTATION 有关或更改 USER_ROTATION , 两者都是 int system settings .

疑难解答

  • 我检查了有关此错误的其他问题。他们中的大多数只解释错误的含义而没有提供任何解决方案。我找不到具有完全相同的调用堆栈跟踪的任何内容。
  • 我检查了the AOSP code for WindowOrientationListener ,但它不包含发生错误的内部类ScreenOrientationEventListenerImpl。三星手机可能使用自定义版本的代码,很可能部分是因为它具有非 AOSP 功能,Smart Rotation .
  • 我认为我的代码没有做任何用户特定的事情;它只是使用普通的 Android API。
  • 我在未获得 root 权限的 Sony Xperia M 和 Sony Xperia Ray 上测试了该应用,在它们上运行良好。
  • 我使用 Samsung Remote Test Lab 在 4 台不同的三星 Galaxy S3 上测试了该应用程序.
  • 我试图找到发生错误的源代码。我找到了 a smali file ,一目了然地表明它正在尝试以用户 -0x2 的身份读取设置 "intelligent_rotation_mode",这很有趣,因为我没有触及可能是三星特定的环境。我还下载了 the official source code 的副本, 但它似乎不包含相关文件。

最佳答案

该应用使用的是来自 AOSP 的 com.android.internal.policy.impl.WindowOrientationListener 的本地副本。但是,本地副本仍在使用原始包 com.android.internal.policy.impl。事实证明,当应用程序尝试使用该类的本地副本时,它实际上使用的是具有相同完全限定名称的原始系统版本。所以问题是应用程序不小心直接使用了手机内置的 WindowOrientationListener

关于java - SecurityException:权限拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27114764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com