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
Odpowiedz
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();
}
}
}
przeczytać Runtime permissions - Android M i its reference project.
Przepływ uprawnień został zmieniony, co wymaga, aby uprawnienia były zadawane w czasie wykonywania, najlepiej w razie potrzeby. Z tymi samymi .. uprawnienia zostały również podzielone na Normal and Dangerous, które również doprowadzą do grup uprawnień.
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.
Pozwolenie nie zmienia się w zależności od poziomu systemu operacyjnego. to jest tak samo jak poniżej. –
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
jego nie ma znaczenia, że uprawnienia są różne. chodzi o to, że musisz poprosić użytkownika w marshmallow o pozwolenie w czasie wykonywania –