Android 6.0权限拒绝:需要权限android.permission.WRITE_SETTINGS

问题描述:

正如您从我的清单中看到的,我已经添加了权限,我错过了什么?Android 6.0权限拒绝:需要权限android.permission.WRITE_SETTINGS

<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" /> 
+0

https://developer.android.com/preview/features/runtime-permissions.html – Budius

+0

我已经读过它了。requestPermissions()方法不起作用,为什么? – Dobin

+0

也许你应该检查,然后:http://stackoverflow.com/help/on-topic和该http://stackoverflow.com/help/dont-ask – Budius

事实证明,你需要使用不同的机制在Android的6 requestPermissions不工作被授予WRITE_SETTINGS,但CommonsGuy提供了这里解决方法:https://stackoverflow.com/a/32083622/238753

这是一种特殊情况: permision级别:签名,

如果应用程序的目标API级别为23或更高,则应用程序用户必须通过权限管理屏幕向应用程序显式授予此权限。

该应用程序通过发送具有操作ACTION_MANAGE_WRITE_SETTINGS的意图来请求用户的批准。

该应用程序可以通过调用Settings.System.canWrite()来检查它是否具有该授权。

在API 23或更高版本,用户必须手动授权使用该权限,则可以通过calling-检查“Settings.System.canWrite”下面是该实施: -

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       if (Settings.System.canWrite(context)) { 
        // Do stuff here 
       } 
       else { 
        Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS); 
        intent.setData(Uri.parse("package:" + getActivity().getPackageName())); 
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(intent); 
       } 
      } 
+3

如何我可以在其他情况下处理活动的结果吗?我怎么知道我的应用程序是否授予了许可? – Mohammad

+3

@Mohammad你可以再次检查''''onResume()'''' – xorgate

+0

@xorgate是的,没错。谢谢! – Mohammad

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (!Settings.System.canWrite(getApplicationContext())) { 
      Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:" + getPackageName())); 
      startActivityForResult(intent, 200); 
     } 
    } 

这奇迹般有效。