2015-08-28 276 views
15

正如您從我的清單中看到的,我已經添加了權限,我錯過了什麼?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

回答

0

這是一種特殊情況: permision級別:簽名,

如果應用程序的目標API級別爲23或更高,則應用程序用戶必須通過權限管理屏幕嚮應用程序顯式授予此權限。

該應用程序通過發送具有操作ACTION_MANAGE_WRITE_SETTINGS的意圖來請求用戶的批准。

該應用程序可以通過調用Settings.System.canWrite()來檢查它是否具有該授權。

44

在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

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

這奇蹟般有效。