2015-08-28 5 views
15

Come si può vedere dal mio manifest di seguito, ho aggiunto il permesso, Cosa mi manca?Negazione autorizzazione Android 6.0: richiede l'autorizzazione 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

L'avevo già letto. Il metodo requestPermissions() non funziona, perché? – Dobin

+0

forse dovresti controllare che: http://stackoverflow.com/help/on-topic e http://stackoverflow.com/help/dont-ask – Budius

risposta

0

Questo è un caso particolare: livello di permessi: firma,

Se l'app raggiunge il livello API 23 o superiore, l'utente dell'app deve concedere esplicitamente questa autorizzazione all'app tramite una schermata di gestione delle autorizzazioni.

L'app richiede l'approvazione dell'utente inviando un intent con azione ACTION_MANAGE_WRITE_SETTINGS.

L'app può verificare se ha questa autorizzazione chiamando Settings.System.canWrite().

44

In API 23 o superiore utente deve autorizzare manualmente per questa autorizzazione, è possibile controllare da calling- 'Settings.System.canWrite' sotto è l'implementazione per questo: -

  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

Come posso gestire il risultato dell'attività in altre condizioni? Come potrei sapere se la mia app ha concesso l'autorizzazione? – Mohammad

+3

@Mhammad puoi controllare di nuovo in '' '' onResume() '' '' – xorgate

+0

@xorgate Sì, è vero. Grazie! – 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); 
     } 
    } 

questo funziona come un fascino.