2015-08-28 18 views
15

Jak widać z mojego manifestu poniżej, dodałem pozwolenie, Czego mi brakuje?Android 6.0 Odmowa zezwolenia: wymaga pozwolenia 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

Już to przeczytałem. Metoda requestPermissions() nie działa, dlaczego? – Dobin

+0

może powinieneś to sprawdzić: http://stackoverflow.com/help/on-topic i że http://stackoverflow.com/help/dont-ask – Budius

Odpowiedz

0

Jest to szczególny przypadek: poziom uprawnień: podpis,

Jeśli aplikacja jest skierowana na poziom API 23 lub wyższy, użytkownik aplikacji musi jawnie przyznać temu uprawnieniu aplikację za pomocą ekranu zarządzania uprawnieniami.

Aplikacja żąda zgody użytkownika, wysyłając intencję z akcją ACTION_MANAGE_WRITE_SETTINGS.

Aplikacja może sprawdzić, czy ma to uprawnienie, dzwoniąc do ustawień.System.canWrite().

44

API 23 lub wyższym użytkownik musi ręcznie zezwolić na to zgody, można sprawdzić przez Calling „Settings.System.canWrite” poniżej jest realizacja tego: -

  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

Jak czy mogę obsłużyć wynik działania w innym stanie? Jak mogę się dowiedzieć, czy moja aplikacja uzyskała zgodę? – Mohammad

+3

@Mohammad można sprawdzić ponownie w '' '' onResume() '' '' – xorgate

+0

@ xorgate Tak, zgadza się. Dziękuję Ci! – 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); 
     } 
    } 

to działa jak marzenie.

Powiązane problemy