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. Jednak niektóre ma główny przypadek użycia, który wymaga szerokiego dostępu do plików na urządzeniu, nie może skutecznie uzyskać do nich dostępu z wykorzystaniem sprawdzonych metod przechowywania danych w sposób zapewniający ochronę prywatności. Android zapewnia specjalny dostęp do aplikacji, nazywany dostępem do wszystkich plików. w różnych sytuacjach.

Na przykład główny przypadek użycia aplikacji antywirusowej może wymagać regularnego skanowania wielu plików w różnych katalogach. Jeśli to skanowanie wymaga powtarzania podczas wybierania katalogów za pomocą systemowego selektora plików, nie są wygodne w obsłudze. 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 parametr MANAGE_EXTERNAL_STORAGE uprawnienia użytkownika w pliku manifestu.
  2. Użyj ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION działanie intencji, które ma kierować użytkowników na stronę ustawień systemu, na której mogą ją włączyć wybierz opcję Zezwól na zarządzanie wszystkimi plikami.

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

Operacje dozwolone przez MANAGE_EXTERNAL_STORAGE

Uprawnienie MANAGE_EXTERNAL_STORAGE zapewnia te korzyści:

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

  • Dostęp do zawartości 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ą plik bezpośredni ścieżki dostępu.

    Aplikacje, którym przyznano to uprawnienie, nadal nie mają dostępu do katalogów należących do innych aplikacji, bo te katalogi występują jako podkatalogi Android/data/ w woluminu miejsca na dane.

Jeśli aplikacja ma uprawnienie MANAGE_EXTERNAL_STORAGE, będzie miała dostęp do tych elementów: plików i katalogów za pomocą Interfejs API MediaStore lub plik bezpośredni . 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łać aktywność zarządzania pamięcią 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 z atrybutem określona nazwa pakietu ma zdefiniowaną niestandardową „zarządzanie przestrzenią” działania. 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 podanej nazwie pakietu nie ma zdefiniowanego parametru „manage” spacja” działania.

Włącz MANAGE_EXTERNAL_STORAGE na potrzeby testowania

Aby sprawdzić, jak uprawnienie MANAGE_EXTERNAL_STORAGE wpływa na Twoją aplikację, może włączyć uprawnienia do testowania. 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. Ta zasada i obowiązują od maja 2021 r.

Jeśli aplikacja jest kierowana na Androida 11 lub nowszego i zadeklaruje parametr MANAGE_EXTERNAL_STORAGE, Android Studio wyświetla ostrzeżenie, które co widać na rysunku 1. To ostrzeżenie informuje, że w Sklepie Google Play obowiązują która ogranicza możliwość korzystania z tego uprawnienia.

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. Wykorzystanie aplikacji musi być zgodny z dozwolonymi zastosowaniami i musi być bezpośrednio powiązany z główną funkcjonalność aplikacji. Jeśli aplikacja zawiera przypadek użycia jak każda z tych sytuacji, prawdopodobnie będzie 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