Większość aplikacji, które wymagają dostępu do pamięci współdzielonej, może stosować sprawdzone metody udostępniania plików multimedialnych i udostę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 dostępu w wydajny sposób, stosując sprawdzone metody dotyczące 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 podstawowy przypadek użycia aplikacji antywirusowej może wymagać regularnego skanowania wielu plików w różnych katalogach. Jeśli skanowanie wymaga wielokrotnego wybierania katalogów przez użytkownika za pomocą okna wyboru plików systemowych, może to negatywnie wpłynąć na wygodę użytkownika. Inne przypadki użycia, takie jak aplikacje do zarządzania plikami, aplikacje do tworzenia i przywracania kopii zapasowych oraz aplikacje do zarządzania dokumentami, wymagają podobnych rozważań.
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 uprawnienie
MANAGE_EXTERNAL_STORAGEw pliku manifestu. - Użyj działania intencji
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSIONaby 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 aplikacja ma przyznane MANAGE_EXTERNAL_STORAGEuprawnienia, wywołaj
Environment.isExternalStorageManager().
Operacje dozwolone przez MANAGE_EXTERNAL_STORAGE
Uprawnienie MANAGE_EXTERNAL_STORAGE umożliwia:
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 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/Androidi większości podkatalogów/sdcard/Android. Uprawnienia do zapisu obejmują dostęp do bezpośredniej ścieżki do pliku.Aplikacje, którym przyznano to uprawnienie, nadal nie mają 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 to MANAGE_EXTERNAL_STORAGE uprawnienie, 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. Gdy korzystasz z 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 (poziom interfejsu API 31) i nowszym aplikacje, które mają uprawnienia MANAGE_EXTERNAL_STORAGE i QUERY_ALL_PACKAGES, np. aplikacje do zarządzania plikami, mogą używać 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 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 informacje dla deweloperów publikujących aplikacje w Google Play.
Aby ograniczyć szeroki dostęp do pamięci współdzielonej, w Google Play zaktualizowaliśmy zasady, 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 aplikacja jest kierowana na Androida 11 lub nowszego i deklaruje uprawnienie MANAGE_EXTERNAL_STORAGE, Android Studio wyświetli ostrzeżenie narzędzia lint, które widać na ilustracji 1. To ostrzeżenie przypomina, że Sklep Google Play ma zasady, które ograniczają korzystanie z tego uprawnienia.
MANAGE_EXTERNAL_STORAGE.
O uprawnienie 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ść, takich jak 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 funkcjonalności. Jeśli aplikacja obejmuje przypadek użycia podobny do któregokolwiek z tych, które wymieniono poniżej, 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