6

Sto sviluppando un'app per Android in cui è necessario fornire l'autorizzazione per la lettura e la scrittura di archivi esterni. Il mio requisito è selezionare un'immagine dalla galleria e usarla nella mia app. Funziona tutto bene tranne i dispositivi Marshmallow. Voglio fornire il permesso per Marshmallow. Qualcuno mi può aiutare con questo?Autorizzazione di lettura e scrittura per l'utilizzo di archivi e gallerie per marshmallow

+0

L'autorizzazione non cambia in base al livello os. è lo stesso di sotto.

+0

ho già dato quell'autorizzazione nel mio programma .. ma app si arresta in modo anomalo quando l'utente marshmallow seleziona l'immagine dalla galleria ... l'autorizzazione di pubblicazione è prenotata – tiger

+0

non importa se l'autorizzazione è diversa. si tratta di dover chiedere all'utente in marshmallow sul permesso in fase di esecuzione –

risposta

15

Può essere raggiunto qualcosa come segue ...

public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback{ 

    private static final int REQUEST_WRITE_PERMISSION = 786; 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == REQUEST_WRITE_PERMISSION && grantResults[0] == PackageManager.PERMISSION_GRANTED) {    
     openFilePicker(); 
    } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    requestPermission(); 
    } 

    private void requestPermission() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION); 
    } else { 
     openFilePicker(); 
    } 
    } 
} 
0

Inoltre, se si desidera chiedere più autorizzazioni. Puoi farlo.

private ArrayList<String> permisos; 

private void someMethod() 
{ 
     .. 

     verificarPermisos(Manifest.permission.READ_EXTERNAL_STORAGE); 
     verificarPermisos(Manifest.permission.ACCESS_FINE_LOCATION); 
     verificarPermisos(Manifest.permission.ACCESS_COARSE_LOCATION); 
     if (permisos.size()!=0) 
     { 
     solicitarPermisos(permisos.toArray(new String[permisos.size()])); 
     } 

     .. 

} 


@TargetApi(23) 
void verificarPermisos(String permiso){ 
    if (ContextCompat.checkSelfPermission(this,permiso) 
      != PackageManager.PERMISSION_GRANTED) { 
     permisos.add(permiso); 
     // Should we show an explanation? 
     if (shouldShowRequestPermissionRationale(permiso)) { 

     } 

    } 
} 

@TargetApi(23) 
void solicitarPermisos(String[] permiso){ 

    requestPermissions(permiso, 1); 

} 

In primo luogo, verificare se l'autorizzazione è già concesso o non con il metodo "verificarPermisos()". Se non sono concessi, li aggiungo all'array "permisos". Infine, le autorizzazioni non richieste vengono riconquistate passandole in un formato di matrice String [].

Si noti che è possibile richiedere solo le autorizzazioni da MashMellow (API 23) o superiore. Pertanto, se la tua app è destinata alle versioni di Android prima di MashMellow, puoi utilizzare l'annotazione "@TargetApi()" ei metodi di autorizzazione possono essere chiamati solo quando la destinazione è API 23 o successiva.
Spero di aiutare, saluti.