Android 6 Marshmallow:某些特定权限的请求立即被拒绝,没有显示 ui
Android 6 Marshmallow: requests for some specific permissions are instantly denied with no ui shown
使用官方 AVD 版本。 3
调用这个:
ActivityCompat.requestPermissions(activity, new String[]{"android.permission.USE_CREDENTIALS"}, REQUEST_PERMISSION_CREDENTIALS);
立即触发:
onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults)
结果代码是PackageManager.PERMISSION_DENIED
有人有解决办法吗?
更新:
已知受影响:
Manifest.permission.CHANGE_NETWORK_STATE
Manifest.permission.WRITE_SETTINGS (solved, see Sam's answer)
android.permission.USE_CREDENTIALS (solved, read Update 2)
READ_SMS
更新 2:
查看优秀的接受答案。本质上,USE_CREDENTIALS 现在是一个安全权限。打败我为什么sdk不只是return PERMISSION_GRANTED...
参考这些页面:permissions by protection level and protection level definitions。
Manifest.permission.CHANGE_NETWORK_STATE
Manifest.permission.WRITE_SETTINGS
这些属于“signature|appop|pre23|preinstalled”保护级别,这意味着只有相同签名的应用程序(基本上系统签名)、应用程序运营商、目标低于 API 级别 23 和预安装的应用程序应用程序可以有这些。
android.permission.USE_CREDENTIALS
只有 API 22 级及以下才需要。参见 this。
您还应该查看 Behavior Changes。
关于WRITE_SETTINGS
,CommonsGuy 在这里提供了解决方法:
看来你已经解决了。我有同样的症状,但原因更愚蠢。
我的 uses-permission 节点在我的清单中的应用程序节点内。这似乎适用于 22 或更少,但移动到 23 似乎无法识别它,因此自动拒绝许可。
希望这可以帮助其他坚持这个的人。
首先检查 Marshmellow 版本,然后在更改 activity 名称后将其粘贴到您的代码中
if (!android.provider.Settings.System.canWrite(RingdroidEditActivity.this)) {
Intent intentt = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
intentt.setData(Uri.parse("package:" + RingdroidEditActivity.this.getPackageName()));
intentt.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intentt);
}
这会将您带到应用的权限页面并请求用户授予权限
WRITE_SETTINGS marshmellow 更改后
这会起作用
要查看示例,请检查此应用程序
使用官方 AVD 版本。 3
调用这个:
ActivityCompat.requestPermissions(activity, new String[]{"android.permission.USE_CREDENTIALS"}, REQUEST_PERMISSION_CREDENTIALS);
立即触发:
onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults)
结果代码是PackageManager.PERMISSION_DENIED
有人有解决办法吗?
更新: 已知受影响:
Manifest.permission.CHANGE_NETWORK_STATE
Manifest.permission.WRITE_SETTINGS (solved, see Sam's answer)
android.permission.USE_CREDENTIALS (solved, read Update 2)
READ_SMS
更新 2: 查看优秀的接受答案。本质上,USE_CREDENTIALS 现在是一个安全权限。打败我为什么sdk不只是return PERMISSION_GRANTED...
参考这些页面:permissions by protection level and protection level definitions。
Manifest.permission.CHANGE_NETWORK_STATE
Manifest.permission.WRITE_SETTINGS
这些属于“signature|appop|pre23|preinstalled”保护级别,这意味着只有相同签名的应用程序(基本上系统签名)、应用程序运营商、目标低于 API 级别 23 和预安装的应用程序应用程序可以有这些。
android.permission.USE_CREDENTIALS
只有 API 22 级及以下才需要。参见 this。
您还应该查看 Behavior Changes。
关于WRITE_SETTINGS
,CommonsGuy 在这里提供了解决方法:
看来你已经解决了。我有同样的症状,但原因更愚蠢。
我的 uses-permission 节点在我的清单中的应用程序节点内。这似乎适用于 22 或更少,但移动到 23 似乎无法识别它,因此自动拒绝许可。
希望这可以帮助其他坚持这个的人。
首先检查 Marshmellow 版本,然后在更改 activity 名称后将其粘贴到您的代码中
if (!android.provider.Settings.System.canWrite(RingdroidEditActivity.this)) {
Intent intentt = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
intentt.setData(Uri.parse("package:" + RingdroidEditActivity.this.getPackageName()));
intentt.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intentt);
}
这会将您带到应用的权限页面并请求用户授予权限
WRITE_SETTINGS marshmellow 更改后 这会起作用 要查看示例,请检查此应用程序