【问题标题】:Android 设置权限没有发挥应有的作用
【发布时间】:2022-01-09 02:14:25
【问题描述】:

我需要征得用户的许可。我需要的权限之一是ACTION_MANAGE_OVERLAY_PERMISSION,另一个是Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION。当您在下面的代码中看到请求时,它会将用户带到“设置”屏幕,以便用户可以从那里勾选权限。

Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
        Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, OVERLAY_PERMISSION_REQUEST_CODE);

在某些 Android 手机和 Android 版本上,它会将用户直接带到其他设备上的特定应用程序设置(调用它的应用程序),它会打开应用程序列表,用户必须从中找到应用程序和然后勾选权限。在大多数情况下,在低于 10 的 Android 上,它会打开特定的应用设置窗口,当它是 10 或更高版本时,它会打开列表。
有没有办法让它始终打开当前打开的应用程序设置?

我尝试添加:

intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse("package:" + getApplicationContext().getPackageName()));

但这也无济于事。

其次,有没有一种方法可以在不打开 Settings 菜单的情况下,而不是在应用程序内的对话框中请求此权限和其他 Settings 权限?
如果没有,那么有没有办法一个接一个地请求多个Settings 权限,因为我的应用程序需要两个Settings 类型权限。

编辑

这就是我所说的特定应用程序设置与列表的含义。

左图列出了所有应用程序,右图打开了特定应用程序(如果您单击列表中的应用程序,则会发生这种情况)。

现在在某些情况下,它直接打开右侧图片,但大多数情况下它打开左侧。有没有办法一直强制打开正确的图片?

【问题讨论】:

  • "有没有办法让它始终打开当前打开的应用程序设置?" - “当前打开的应用程序设置”是什么意思? “有没有办法在不打开设置菜单而不是在应用程序内的对话框中进行此操作的情况下请求此权限和其他设置权限?” - 没有。 “我的应用程序需要两个设置类型权限”——也许您应该重新考虑使用它们。例如,系统覆盖目前在某些 Android 设备上不可用,如果将来它们被全部屏蔽,我也不会感到惊讶。
  • @CommonsWare 编辑了问题以指定“有没有办法让它......”。谢谢你的其他答案。

标签: java android android-intent android-permissions android-settings


【解决方案1】:

有没有办法强制始终打开正确的图片?

没有。

“设置”应用通常由设备制造商进行大量修改。他们可以为所欲为。这包括忽略Uri 或直接删除第三方对此屏幕的访问权限,后者就是the documentation is warning against

在某些情况下,匹配的 Activity 可能不存在,因此请确保防范这种情况。

如果您制作自己的 Android 固件,则可以确保 Intent 操作按照您的意愿运行,无论设备运行您的固件。

【讨论】:

  • 如果您知道,请作为后续问题。是否有可能以某种方式检查Uri 在询问此权限时是否会被忽略。因此,如果要忽略它,我会先告诉用户如何找到该应用并启用它。
  • @Richard:“是否有可能以某种方式检查是否会在请求此权限时忽略 Uri” - 您会知道 <intent-filter> 是否不包括 package方案,因为 startActivity() 调用将无法找到匹配项。但是,如果<intent-filter> 宣传它接受Uri,您将无法知道应用程序对Uri 做了什么,包括忽略它。
猜你喜欢
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多