Większość aplikacji, które wymagają dostępu do pamięci współdzielonej, może stosować sprawdzone metody 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ą one uzyskać do nich efektywnego dostępu przy użyciu sprawdzonych metod dotyczących pamięci, które zapewniają użytkownikowi 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 to skanowanie wymaga powtarzających się interakcji użytkownika w celu wybrania katalogów za pomocą systemowego okna wyboru plików, zapewnia to słabą jakość obsługi. Podobne kwestie należy wziąć pod uwagę w przypadku innych przypadków użycia, takich jak aplikacje menedżera plików, 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:
- Zadeklaruj
MANAGE_EXTERNAL_STORAGEuprawnienie w pliku manifestu. - Użyj działania intencji
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION, aby przekierować użytkowników na stronę ustawień systemowych, na której mogą włączyć dla Twojej aplikacji opcję: Zezwalaj na dostęp do zarządzania wszystkimi plikami.
Aby sprawdzić, czy Twoja aplikacja ma uprawnienie MANAGE_EXTERNAL_STORAGE
, wywołaj metodę
Environment.isExternalStorageManager().
Operacje dozwolone przez MANAGE_EXTERNAL_STORAGE
Uprawnienie MANAGE_EXTERNAL_STORAGE przyznaje te uprawnienia:
Dostęp 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 dysku USB OTG i karty SD.
Dostęp do zapisu we wszystkich katalogach pamięci wewnętrznej z wyjątkiem
/Android/data/,/sdcard/Androidi 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, nadal nie mogą uzyskiwać dostępu do katalogów specyficznych dla aplikacji należących do innych aplikacji, ponieważ te katalogi są wyświetlane jako podkatalogi
Android/data/na woluminie pamięci.
Gdy aplikacja ma uprawnienie MANAGE_EXTERNAL_STORAGE, może uzyskiwać dostęp do tych
dodatkowych plików i katalogów za pomocą interfejsu
MediaStore API lub bezpośrednich ścieżek
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 zarządzania pamięcią innej aplikacji
Na Androidzie 12 (poziom interfejsu API 31) i nowszym aplikacje, które mają zarówno uprawnienie
MANAGE_EXTERNAL_STORAGE
, jak i uprawnienie
QUERY_ALL_PACKAGES
(np. aplikacje do zarządzania plikami), mogą używać metody
getManageSpaceActivityIntent()
do wysyłania użytkowników do niestandardowego działania zarządzania miejscem
innej aplikacji.
Metoda getManageSpaceActivityIntent() przyjmuje nazwę pakietu i kod żądania, a zwraca jedną z tych wartości:
- A
PendingIntent, jeśli aplikacja o podanej nazwie pakietu zdefiniowała niestandardowe działanie „zarządzaj miejscem”. 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 niestandardowego działania. null, jeśli aplikacja o podanej nazwie pakietu nie definiuje działania „zarządzaj miejscem”.
Włączanie MANAGE_EXTERNAL_STORAGE na potrzeby testowania
Aby sprawdzić, jak uprawnienie MANAGE_EXTERNAL_STORAGE wpływa na Twoją aplikację, możesz włączyć je na potrzeby 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
Informacja z Google Play
Ta sekcja zawiera informacje dla deweloperów, którzy publikują aplikacje w Google Play.
Aby ograniczyć szeroki dostęp do pamięci współdzielonej, Sklep Google Play zaktualizował swoje
zasady
aby oceniać aplikacje, które są kierowane na Androida 11 (poziom interfejsu API 30) lub nowszego i wymagają
dostępu do wszystkich plików za pomocą uprawnienia MANAGE_EXTERNAL_STORAGE. Te zasady obowiązują od maja 2021 r.
Gdy Twoja aplikacja jest kierowana na Androida 11 lub nowszego i deklaruje uprawnienie MANAGE_EXTERNAL_STORAGE, Android Studio wyświetla ostrzeżenie lintera widoczne na rysunku 1. To ostrzeżenie przypomina, że Sklep Google Play ma zasady ograniczające użycie tego uprawnienia.
MANAGE_EXTERNAL_STORAGE
uprawnienia.
Poproś o uprawnienie MANAGE_EXTERNAL_STORAGE tylko wtedy, gdy Twoja aplikacja
nie może efektywnie korzystać z interfejsów API, które zapewniają użytkownikowi 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 wyłącznie na potrzeby obsługi swojej głównej funkcjonalności. Jeśli Twoja aplikacja obejmuje przypadek użycia podobny do któregokolwiek z tych przypadków, 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 dysków i plików
- Migracja danych między urządzeniami