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

Większość aplikacji, które wymagają dostępu do udostępnionego miejsca na dane, może stosować sprawdzone metody udostępniania plików multimedialnychudostępniania plików niemultimedialnych. 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. Inne przypadki użycia, takie jak menedżery plików, aplikacje do tworzenia i przywracania kopii zapasowych oraz aplikacje do zarządzania dokumentami, wymagają podobnych rozważań.

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 intencyjnego ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION, aby przekierować użytkowników na stronę ustawień systemu, na której mogą włączyć dla Twojej aplikacji tę opcję: Zezwalaj na dostęp do zarządzania wszystkimi plikami.

Aby sprawdzić, czy Twoja aplikacja ma przyznane uprawnienie MANAGE_EXTERNAL_STORAGE, wywołaj funkcję Environment.isExternalStorageManager().

Operacje dozwolone przez uprawnienie MANAGE_EXTERNAL_STORAGE

Uprawnienia MANAGE_EXTERNAL_STORAGE:

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

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

  • Dostęp do katalogu głównego dysku USB 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. 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 Storage Access Framework, możesz uzyskać 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 czynnoś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 powiadomienie 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. Te zasady obowiązują od maja 2021 r.

Jeśli Twoja aplikacja jest kierowana na Androida 11 lub nowszego i zadeklarowała uprawnienie MANAGE_EXTERNAL_STORAGE, Android Studio wyświetla ostrzeżenie lint pokazane na rysunku 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 dozwolonymi przypadkami 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