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

Większość aplikacji, które wymagają dostępu do pamięci współdzielonej, może stosować sprawdzone metody udostępniania plików multimedialnychudostępniania 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ą uzyskać do nich efektywnego dostępu przy użyciu sprawdzonych metod dotyczących pamięci, które zapewniają użytkownikom większą prywatność. W takich sytuacjach Android udostępnia specjalny dostęp do aplikacji 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 wielokrotnych interakcji użytkownika w celu wybrania katalogów za pomocą selektora plików systemowych, może to negatywnie wpłynąć na wygodę użytkownika. Podobne kwestie należy wziąć pod uwagę w przypadku innych zastosowań, takich jak aplikacje do zarządzania plikami, aplikacje do tworzenia i przywracania kopii zapasowych oraz aplikacje do zarządzania dokumentami.

Prośba 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 kierować użytkowników na stronę ustawień systemu, na której mogą włączyć w przypadku Twojej aplikacji opcję Zezwalaj na dostęp do zarządzania wszystkimi plikami.

Aby sprawdzić, czy Twoja aplikacja ma przyznane MANAGE_EXTERNAL_STORAGEuprawnienia, wywołaj Environment.isExternalStorageManager().

Operacje dozwolone w przypadku uprawnienia MANAGE_EXTERNAL_STORAGE

Uprawnienie MANAGE_EXTERNAL_STORAGE umożliwia:

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

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

  • Dostęp do katalogu głównego zarówno dysku USB OTG, jak 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. Ten dostęp do zapisu obejmuje dostęp do bezpośredniej ścieżki do pliku.

    Aplikacje, które mają to uprawnienie, nadal nie mogą uzyskiwać dostępu do katalogów specyficznych dla aplikacji należących do innych aplikacji, ponieważ katalogi te są podkatalogami Android/data/ na woluminie pamięci.

Gdy aplikacja ma uprawnienie MANAGE_EXTERNAL_STORAGE, może uzyskać dostęp do tych dodatkowych plików i katalogów za pomocą interfejsu MediaStore API lub bezpośrednich ścieżek do plików. Jeśli jednak używasz Storage Access Framework, możesz uzyskać dostęp do pliku lub katalogu tylko wtedy, gdy możesz to zrobić bez uprawnienia MANAGE_EXTERNAL_STORAGE.

Wywoływanie działania związanego z zarządzaniem miejscem na dane w innej aplikacji

Na Androidzie 12 (interfejs API na poziomie 31) i nowszym aplikacje, które mają uprawnienia MANAGE_EXTERNAL_STORAGEQUERY_ALL_PACKAGES (np. aplikacje do zarządzania plikami), mogą używać funkcji getManageSpaceActivityIntent(), aby przekierowywać użytkowników do aktywności związanej z zarządzaniem przestrzenią niestandardową innej aplikacji.

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

  • PendingIntent, jeśli aplikacja o podanej nazwie pakietu ma zdefiniowaną niestandardową aktywność „zarządzanie miejscem”. Aplikacja do zarządzania plikami, która wywołała metodę getManageSpaceActivityIntent(), może następnie wywołać zwróconą intencję, aby przekierować użytkowników do niestandardowego działania.
  • null, jeśli aplikacja o podanej nazwie pakietu nie definiuje aktywności „manage space”.

Włączanie uprawnienia MANAGE_EXTERNAL_STORAGE na potrzeby testowania

Aby sprawdzić, jak uprawnienie MANAGE_EXTERNAL_STORAGE wpływa na aplikację, możesz włączyć je na potrzeby testowania. Aby to zrobić, uruchom to polecenie na urządzeniu połączonym z urządzeniem testowym:

adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow

Powiadomienie Google Play

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

Aby ograniczyć szeroki dostęp do pamięci współdzielonej, w Google Play zaktualizowaliśmy zasady, aby oceniać aplikacje, które są kierowane na Androida 11 (poziom API 30) lub nowszego i żądają dostępu do wszystkich plików za pomocą uprawnienia MANAGE_EXTERNAL_STORAGE. Te zasady obowiązują od maja 2021 r.

Jeśli aplikacja jest kierowana na Androida 11 lub nowszego i deklaruje uprawnienie MANAGE_EXTERNAL_STORAGE, Android Studio wyświetla ostrzeżenie narzędzia lint, które widać na ilustracji 1. To ostrzeżenie przypomina, że Sklep Google Play ma zasady, które ograniczają używanie tego uprawnienia.

Rysunek 1. Ostrzeżenie Lint w Android Studio, które przypomina 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 obejmuje przypadek użycia podobny do któregokolwiek 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