【问题标题】:Permission Denial: this requires android.permission.INTERACT_ACROSS_USERS_FULL权限拒绝:这需要 android.permission.INTERACT_ACROSS_USERS_FULL
【发布时间】:2014-01-01 22:17:05
【问题描述】:

我在 Android 中遇到了 sqlite db 的问题。但是当我在互联网上进行快速研究时,我怀疑问题与 sqlite 无关,而是与系统用户有关。我的应用程序未被识别为访问数据库功能的授权用户。我试图在堆栈溢出中应用可能的建议解决方案,但没有一个有所作为。这是我每次尝试使用 db 功能时都面临的 LogCat。

12-14 02:35:17.721    2953-3355/? E/DatabaseUtils﹕ Writing exception to parcel
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
at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13082)
at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2038)
at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:577)
at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
at android.os.Binder.execTransact(Binder.java:388)
at dalvik.system.NativeStart.run(Native Method)

我尝试添加权限

android.permission.INTERACT_ACROSS_USERS_FULL

但仍然没有声音。奇怪的是,当我尝试添加 INTERNET 权限时,Android Studio 0.3(我使用的 ide)建议我可以选择可能的权限。但是当涉及到 INTERACT_ACROSS_USERS_FULL 权限时,它的行为就像它不知道这个权限一样。我的测试设备是运行 4.3 的三星 S4。

我认为我不是唯一一个尝试在 android 上使用 db 的人。所以有一个解决方案。

如何才能真正为我的应用程序添加 INTERACT_ACROSS_USERS_FULL 权限?

【问题讨论】:

  • 好的,这个帖子我看过几次了。但是这是什么意思?如何给我的应用程序提供与系统相同的签名?
  • 你必须要么成为创建者或他们的系统,要么说服他们签署你的应用程序——这对大多数开发者来说都不现实,也就是说,你不能.听起来您确实在做一些不必要的奇怪事情。您是否尝试过构建一个简单的数据库示例,可以追溯到多用户支持之前的日子?
  • 感谢您的关注。我意识到这个问题与多用户问题无关。数据库操作现在可以工作了。但是这个错误一直显示。它目前不影响功能,但我想知道它以后会成为问题。
  • 到目前为止有什么解决方案吗?

标签: android sqlite permissions user-permissions


【解决方案1】:

根据这个答案:android.permission.INTERACT_ACROSS_USERS_FULL is a signature level permission.您的应用将无法使用它,除非它与系统具有相同的签名。

除非您是创建者或系统构建者,或者与他们合作以便他们愿意使用他们的证书签署您的 apk,否则您无法实现这一点。换句话说,这对大多数开发人员来说是禁区。

【讨论】:

  • 我要不要加这个权限,为什么这么复杂的反应?
  • 正如答案所述,除非您的应用能够访问您设备上的系统级签名,否则我们无法将此权限添加到我们的 Android 清单文件中。换句话说(a.f.a.i.k.),此功能只能由设备 OEM 使用。
  • 在三星设备上,如果我不使用它会出现异常。在非三星上,如果我使用它,我会遇到异常。我在这个cae做什么?
  • @Siddharth:是的,这个问题在三星设备(尤其是 S3)上基本一致。这通常只是一个例外,不会影响您的流程,因此您可以忽略它。它似乎已在 S4 中解决。如果这会导致您的应用出现问题,我不确定该怎么做。
  • 我认为你是对的。我暂时就这样吧。
【解决方案2】:

我收到了错误 android.permission.INTERACT_ACROSS_USERS_FULL,因为我在项目的 bin 目录 中有一些冲突。我对我的应用包id做了一些更改,bin目录中的app-file-1.apk与项目不匹配。

我做了一个 project > clean 并检查了 bin 文件夹是否已清除并重新生成,它现在可以工作了。

【讨论】:

  • 谢谢,我在安装更新的 Xamarin 时遇到了这个错误,这真的很有帮助。
【解决方案3】:

我有同样的问题,我想我可以帮助你。我已经在我的生产密钥库中注册了我的应用程序,但是正在使用 Eclipse 调试将它加载到我的手机中。 Eclipse 调试使用 debug.keystore,它与您的生产密钥的签名不匹配并抛出此错误。请改用调试密钥库进行测试或将 apk 发送给自己并将其下载到您的手机上。

【讨论】:

    【解决方案4】:

    当我在 Manifest 中将 minSdkVersion 从 8 更改为 11 时出现此错误。我把它改回 8 或 9 并且没有更多错误。

    尝试更改清单中的 minSdkVersion。我能够在版本 10、11 和 12 中重复崩溃和错误结果(我的应用程序崩溃并在 LogCat 中显示“需要 android.permission.INTERACT_ACROSS_USERS_FULL”)

    【讨论】:

      【解决方案5】:

      尝试禁用自动填充。它在 Android Oreo 上 100% 运行。检查这个link

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

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

      【讨论】:

      • 这个问题的答案如何?
      • 我不记得我在哪里读到的,但它对我有用。所以,它可能是可能的解决方案之一
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多