8

使用官方 AVD rev。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 不简单地为它返回 PERMISSION_GRANTED ......

4

4 回答 4

6

请参阅这些页面:按保护级别和保护级别定义的权限

Manifest.permission.CHANGE_NETWORK_STATE

Manifest.permission.WRITE_SETTINGS

这些属于“签名|appop|pre23|preinstalled”保护级别,这意味着只有相同签名的应用程序(基本上是系统签名的)、应用程序运营商、目标低于 API 级别 23 的应用程序和预安装的应用程序可以拥有这些。

android.permission.USE_CREDENTIALS

这仅在 API 级别 22 及以下需要。看到这个

您还应该查看Behavior Changes

于 2015-08-22T22:31:46.453 回答
1

关于WRITE_SETTINGS,CommonsGuy 在这里提供了一个解决方法:https ://stackoverflow.com/a/32083622/238753

于 2015-08-28T09:18:50.447 回答
1

看来你已经整理好了。我有同样的症状,原因更愚蠢。

我在清单中的应用程序节点内有我的使用权限节点。这似乎适用于 22 或更少,但移动到 23 似乎无法识别它,因此自动拒绝许可。

希望这可以帮助其他人坚持这一点。

于 2016-01-20T14:44:23.770 回答
0

首先检查 Marshmellow 版本,然后在更改活动名称后将其粘贴到您的代码中

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);
            }

这会将您带到应用程序的权限页面并要求用户授予权限

marshmellow 更改后的 WRITE_SETTINGS 这将用于查看示例检查此应用程序

于 2016-11-22T07:36:46.650 回答