Zarządzanie wszystkimi plikami na urządzeniu pamięci masowej

Większość aplikacji, które wymagają dostępu do pamięci współdzielonej, jest zgodna ze sprawdzonymi metodami udostępniania plików multimedialnych i plików innych niż multimedialne. Niektóre aplikacje mają jednak główny przypadek użycia, który wymaga szerokiego dostępu do plików na urządzeniu, ale nie mogą efektywnie uzyskać do nich dostępu, korzystając z sprawdzonych metod zapewniających prywatność. W takich sytuacjach Android udostępnia specjalne uprawnienie o nazwie Dostęp do wszystkich plików.

Na przykład główny przypadek użycia aplikacji antywirusowej może wymagać regularnego skanowania wielu plików w różnych katalogach. Jeśli skanowanie wymaga wielokrotnego interakcji z użytkownikiem w celu wybrania katalogów za pomocą selektora plików systemowych, może to negatywnie wpłynąć na komfort użytkownika. Podobne kwestie należy wziąć pod uwagę w przypadku innych zastosowań, takich jak menedżery plików, aplikacje do tworzenia i przywracania kopii zapasowych oraz aplikacje do zarządzania dokumentami.

Poproś o dostęp do wszystkich plików

Aplikacja może poprosić użytkownika o dostęp do wszystkich plików, wykonując te czynności:

  1. Zadeklaruj uprawnienie MANAGE_EXTERNAL_STORAGE w pliku manifestu.
  2. Użyj działania intencji ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION, aby przekierować użytkowników na stronę ustawień systemu, na której mogą włączyć tę opcję aplikacji: Zezwól na dostęp do zarządzania wszystkimi plikami.

Aby sprawdzić, czy Twoja aplikacja otrzymała uprawnienia MANAGE_EXTERNAL_STORAGE, wywołaj Environment.isExternalStorageManager().

Operacje dozwolone przez MANAGE_EXTERNAL_STORAGE

Uprawnienia MANAGE_EXTERNAL_STORAGE:

  • Uprawnienia do odczytu i zapisu wszystkich plików w wspólnej pamięci masowej.

  • Dostęp do zawartości tabeli MediaStore.Files.

  • Dostęp do katalogu głównego dysku USB on-the-go (OTG) i karty SD.

  • Dostęp z możliwością zapisu do wszystkich katalogów wewnętrznego miejsca na dane z wyjątkiem /Android/data/, /sdcard/Android i większości podkatalogów /sdcard/Android. Ten dostęp do zapisu obejmuje bezpośredni dostęp do ścieżki pliku.

    Aplikacje, które mają to uprawnienie, nie mają dostępu do katalogów należących do innych aplikacji, ponieważ te katalogi są widoczne jako podkatalogi Android/data/ na woluminie pamięci masowej.

Jeśli aplikacja ma uprawnienia MANAGE_EXTERNAL_STORAGE, może uzyskać dostęp do tych dodatkowych plików i katalogów za pomocą interfejsu API MediaStore lub bezpośrednich ścieżek do plików. Jeśli jednak używasz platformy dostępu do pamięci masowej, masz dostęp do pliku lub katalogu tylko wtedy, gdy możesz to zrobić bez uprawnień MANAGE_EXTERNAL_STORAGE.

Wywołanie działania związanego z zarządzaniem pamięcią w innej aplikacji

W Androidzie 12 (poziom interfejsu API 31) i nowszych aplikacje, które mają zarówno uprawnienia MANAGE_EXTERNAL_STORAGE, jak i QUERY_ALL_PACKAGES, na przykład aplikacje do zarządzania plikami, mogą używać uprawnień getManageSpaceActivityIntent(), aby kierować użytkowników do działalności zarządzania niestandardową przestrzenią innej aplikacji.

Metoda getManageSpaceActivityIntent() przyjmuje nazwę pakietu i kod żądania, a zwraca jedną z tych wartości:

  • PendingIntent, jeśli aplikacja o określonej nazwie pakietu ma zdefiniowaną niestandardową aktywność „zarządzanie pokojem”. Aplikacja do zarządzania plikami, która wywołała metodę getManageSpaceActivityIntent(), może następnie wywołać zwróconą intencję, aby wysłać użytkowników do niestandardowej aktywności.
  • null, jeśli aplikacja o określonej nazwie pakietu nie definiuje czynności „zarządzanie pokojem”.

Włączanie uprawnienia MANAGE_EXTERNAL_STORAGE na potrzeby testów

Aby sprawdzić, jak uprawnienia MANAGE_EXTERNAL_STORAGE wpływają na aplikację, możesz włączyć je na potrzeby testów. Aby to zrobić, uruchom to polecenie na komputerze połączonym z urządzeniem testowym:

adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow

Powiadomienie z Google Play

Ta sekcja zawiera powiadomienia dla deweloperów, którzy publikują aplikacje w Google Play.

Aby ograniczyć szeroki dostęp do współdzielonego miejsca na dane, sklep Google Play zaktualizował swoją politykę, aby oceniać aplikacje kierowane na Androida 11 (poziom API 30) lub nowszego, które wymagają dostępu do wszystkich plików za pomocą uprawnienia MANAGE_EXTERNAL_STORAGE. Zasady te obowiązują od maja 2021 r.

Jeśli Twoja aplikacja jest kierowana na Androida 11 lub nowszego i zadeklaruje uprawnienie MANAGE_EXTERNAL_STORAGE, Android Studio wyświetli ostrzeżenie o Llint widoczne na ilustracji 1. To ostrzeżenie przypomina, że Sklep Google Play ma zasady, które ograniczają wykorzystanie uprawnień.

Rysunek 1. Ostrzeżenie Lint w Android Studio przypominające deweloperom o zasadach Google Play dotyczących uprawnienia MANAGE_EXTERNAL_STORAGE.

O uprawnienia MANAGE_EXTERNAL_STORAGE należy prosić tylko wtedy, gdy aplikacja nie jest w stanie efektywnie korzystać z interfejsów API, które dają użytkownikowi większą prywatność, na przykład Storage Access Framework czy Media Store API. Aplikacja musi korzystać z tego uprawnienia zgodnie z zasadami jego dozwolonego użycia i wyłącznie na potrzeby obsługi swojej głównej funkcji. Jeśli aplikacja zawiera przypadek użycia podobny do któregoś z tych, prawdopodobnie może poprosić o uprawnienie MANAGE_EXTERNAL_STORAGE:

  • Menedżery plików
  • Aplikacje do tworzenia i przywracania kopii zapasowych
  • Aplikacje antywirusowe
  • Aplikacje do zarządzania dokumentami
  • Wyszukiwanie plików na urządzeniu
  • Szyfrowanie dysku i plików
  • Migracja danych z urządzenia na urządzenie