17

Sto tentando di aggiungere le autorizzazioni di runtime Android (6.0.1) API 23, Se utilizzo la versione dell'SDK (min e destinazione versione sia 23) è woks bene, come qui di seguito,La chiamata richiede il livello API 23 (min corrente 14): android.app.Activity # requestPermissions, checkSelfPermission

<uses-sdk 
       android:minSdkVersion="23" 
       android:targetSdkVersion="23" /> 

Se cambio Android: minSdkVersion (meno di 23)

Ad esempio:

sto ottenendo errore qui sotto:

chiamata richiede livello di API 23 (corrente min è 14): android.app.Activity # requestPermissions, checkSelfPermission

Per le seguenti 2 metodi,

1)requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS) 

2)checkSelfPermission(permission) 

ho provato ActivityCompat.checkSelfPermission() e ContextCompat.checkSelfPermission() entrambi non funzionano.

Quello che manca non riusciva a capire ..

+1

ContextCompat.checkSelfPermission() è esattamente ciò che si vuole, potrebbe per favore essere più specifico sul perché non funziona? – Egor

+0

Si verificano errori durante l'utilizzo di ActivityCompat o ContextCompat? Se sì, quale errore? – Srijith

+0

è l'errore che sto ottenendo se utilizzo ActivityCompat "Il metodo checkSelfPermission (String) non è definito per il tipo ActivityCompat" – Joe

risposta

22

entrambi, assegno per destinazione> = 23 o semplicemente aggiungere sotto la linea sopra il metodo di

@TargetApi(Build.VERSION_CODES.M) 

Ad esempio, se si sta verificando per le autorizzazioni di stoccaggio, allora si può fare riferimento a questa funzione,

@TargetApi(Build.VERSION_CODES.M) 
    public boolean CheckStoragePermission() { 
     int permissionCheckRead = ContextCompat.checkSelfPermission(context, 
       Manifest.permission.READ_EXTERNAL_STORAGE); 
     if (permissionCheckRead != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, 
        Manifest.permission.READ_EXTERNAL_STORAGE)) { 
       // Show an expanation to the user *asynchronously* -- don't block 
       // this thread waiting for the user's response! After the user 
       // sees the explanation, try again to request the permission. 
       ActivityCompat.requestPermissions((Activity) context, 
         new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
         Define.PERMISSION_STORAGE); 
      } else { 
       // No explanation needed, we can request the permission. 

       ActivityCompat.requestPermissions((Activity) context, 
         new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
         Define.PERMISSION_STORAGE); 

       // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
       // app-defined int constant. The callback method gets the 
       // result of the request. 
      } 
      return false; 
     } else 
      return true; 
    } 
+0

Grazie anche la tua soluzione :) – Joe

0

di controllo del dispositivo SDK prima di chiamare il permesso richiesta

if(Build.VERSION.SDK_INT==Build.VERSION_CODES.M) 
{ 
//call the request permission here 
} 
11

provare in questo modo

if (Build.VERSION.SDK_INT < 23) { 
     // your code 
} else { 
    if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) 
       != PackageManager.PERMISSION_GRANTED) { 
      requestContactsPermissions1(); 
    } else { 
     // your code 
    } 
} 

Modificato:

Aggiungi in dipendenze bloccare in-livello più basso (la vostra applicazione) build.gradle:

compile 'com.android.support:appcompat-v7:23.1.1' 

o si aggiunge al di sotto solo se avete bisogno di progettare il supporto lib

compile 'com.android.support:design:23.1.1' 

uso uno dei sopra

+0

seguendo l'errore che sto ottenendo se utilizzo ActivityCompat "Il metodo checkSelfPermission (String) non è definito per il tipo ActivityCompat " – Joe

+0

@Joe: verifica la risposta modificata –

3

Questo perché checkSelfPermission() era aggiunto in API 23.Quindi dovrete codice come condizionale:

if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){ 
    //use checkSelfPermission() 
} else { 
    //simply use the required feature 
    //as the user has already granted permission to them during installation 
} 
+0

di seguito è riportato l'errore che si ottiene se utilizzo ActivityCompat" Il metodo checkSelfPermission (String) non è definito per il tipo ActivityCompat " – Joe

+0

@Joe Hai avuto un guarda questo? http://stackoverflow.com/a/34613112/5352802 – camelCaseCoder

+0

Ya sembra che io abbia lo stesso problema, sto usando eclipse, come aggiungere potresti elaborare per favore. – Joe

22

Controllare permesso:

ContextCompat.checkSelfPermission(Context context, String permission)

Richiesta permesso:

ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode)

o all'interno di un supporto-v4 Fragment

requestPermissions(String[] permissions, int requestCode)