6

Pracuję nad aplikacją dla systemu Android, w której wymagane jest zezwolenie na Odczytywanie i zapisywanie pamięci zewnętrznej. Moim żądaniem jest wybranie zdjęcia z galerii i użycie go w mojej aplikacji. Wszystko działa dobrze, z wyjątkiem urządzeń Marshmallow. Chcę zezwolić na Marshmallow. Czy ktoś może mi w tym pomóc?Uprawnienia do odczytu i zapisu do przechowywania i wykorzystania galerii na Marshmallow

+0

Pozwolenie nie zmienia się w zależności od poziomu systemu operacyjnego. to jest tak samo jak poniżej.

+0

Mam już dane pozwolenie w mojej aplikacji manifeast .. ale aplikacja ulega awarii, gdy użytkownik marshmallow wybrać obraz z galerii .. Zeznanie pozwolenie jadłem – tiger

+0

jego nie ma znaczenia, że ​​uprawnienia są różne. chodzi o to, że musisz poprosić użytkownika w marshmallow o pozwolenie w czasie wykonywania –

Odpowiedz

15

Można to osiągnąć coś jak po ...

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

Ponadto, jeśli chcesz poprosić o wiele uprawnień. Możesz to zrobić.

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); 

} 

Po pierwsze, sprawdź, czy zezwolenie zostało już przyznane lub nie z "verificarPermisos()" metody. Jeśli nie zostaną przyznane, dodaję je do listy "permisos". Na koniec, uprawnienia nieautoryzowane są ponownie sprawdzane, przekazując je w formacie tablicy String [] .

Pamiętaj, że możesz żądać tylko uprawnień od MashMellow (API 23) lub wyżej. Tak więc, jeśli twoja aplikacja jest również ukierunkowana na wersje Androida przed MashMellerem, możesz użyć adnotacji "@TargetApi()", a metody uprawnień będą wywoływane tylko wtedy, gdy celem jest API 23 lub nowszy.
Mam nadzieję, że Ci pomogę, pozdrawiam.