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. Jednak w głównych przypadkach użycia niektórych aplikacji wymaga szerokiego dostępu do plików na urządzeniu, ale nie można uzyskać do nich dostępu zgodnie ze sprawdzonymi metodami dotyczącymi przechowywania danych w sposób zapewniający ochronę prywatności. W takich sytuacjach Android zapewnia specjalny dostęp do aplikacji nazywany dostępem do wszystkich plików.

Na przykład: główne zastosowanie aplikacji antywirusowej może wymagać regularnego skanowania wielu plików w różnych katalogach. Jeśli skanowanie wymaga powtarzających się interakcji użytkownika, aby wybrać katalogi za pomocą systemowego selektora plików, nie spełnia ono oczekiwań użytkowników. Inne przypadki użycia, np. aplikacje do zarządzania plikami, aplikacji do tworzenia kopii zapasowych i przywracania danych oraz do zarządzania dokumentami, wymagają podobnego podejścia.

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. W pliku manifestu zadeklaruj uprawnienia MANAGE_EXTERNAL_STORAGE.
  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

Uprawnienie MANAGE_EXTERNAL_STORAGE zapewnia te korzyści:

  • Uprawnienia do zapisu i odczytu wszystkich plików w pamięci współdzielonej.

  • 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 pamięci wewnętrznej z wyjątkiem /Android/data/, /sdcard/Android i większości podkatalogów /sdcard/Android. Te uprawnienia do zapisu obejmują dostęp do bezpośredniej ścieżki pliku.

    Aplikacje, które otrzymały to uprawnienie, nadal nie mają dostępu do katalogów aplikacji należących do innych aplikacji, ponieważ te katalogi są wyświetlane jako podkatalogi Android/data/ w wolumencie miejsca na dane.

Aplikacja z uprawnieniem 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 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łaj aktywność związaną z zarządzaniem miejscem na dane w innej aplikacji

Na Androidzie 12 (poziom interfejsu API 31) i nowszym aplikacje, które mają zarówno uprawnienia MANAGE_EXTERNAL_STORAGE, jak i QUERY_ALL_PACKAGES (np. aplikacje do zarządzania plikami), mogą używać getManageSpaceActivityIntent() do kierowania użytkowników do niestandardowych działań związanych z zarządzaniem pokojem w innych aplikacjach.

Metoda getManageSpaceActivityIntent() pobiera nazwę pakietu i kod żądania, a następnie zwraca jeden z tych elementów:

  • PendingIntent, jeśli aplikacja o określonej nazwie pakietu zdefiniowała niestandardowe działanie „zarządzanie miejscem”. Aplikacja do zarządzania plikami, która wywołała metodę getManageSpaceActivityIntent(), może następnie wywołać zwrócona intencję kierującą użytkowników do aktywności niestandardowej.
  • null, jeśli aplikacja o określonej nazwie pakietu nie ma zdefiniowanej aktywności „zarządzanie miejscem”.

Włącz MANAGE_EXTERNAL_STORAGE na potrzeby testowania

Aby sprawdzić, jak uprawnienie MANAGE_EXTERNAL_STORAGE wpływa na Twoją aplikację, możesz włączyć uprawnienie na potrzeby testowania. Aby to zrobić, uruchom to polecenie na komputerze podłączonym do urządzenia testowego:

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 pamięci współdzielonej, Sklep Google Play zaktualizowaliśmy zasady, które umożliwiają ocenianie aplikacji kierowanych na Androida 11 (poziom interfejsu API 30) lub nowszego i prośby o dostęp 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 w Sklepie Google Play obowiązują zasady, które ograniczają korzystanie z tego uprawnienia.

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

Poproś o uprawnienie MANAGE_EXTERNAL_STORAGE tylko wtedy, gdy aplikacja nie może efektywnie korzystać z interfejsów API, które zapewniają większą prywatność, takich jak Storage Access Framework czy Media Store API. Aplikacja musi korzystać z tych uprawnień zgodnie z zasadami ich dozwolonego użycia i musi być bezpośrednio związana z jej główną funkcją. Jeśli aplikacja wykorzystuje przypadek użycia podobny do któregokolwiek z tych przypadków, prawdopodobnie aplikacja 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 między urządzeniami