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
risposta
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();
}
}
}
leggere attraverso Runtime permissions - Android M e its reference project.
Il flusso delle autorizzazioni è stato modificato richiedendo le autorizzazioni da richiedere in fase di runtime, preferibilmente, come e quando richiesto. Con lo stesso .. le autorizzazioni sono state classificate anche in Normal and Dangerous che porteranno anche a gruppi di permessi.
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.
L'autorizzazione non cambia in base al livello os. è lo stesso di sotto. –
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
non importa se l'autorizzazione è diversa. si tratta di dover chiedere all'utente in marshmallow sul permesso in fase di esecuzione –