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. Jednak główny przypadek użycia niektórych aplikacji wymaga szerokiego dostępu do plików na urządzeniu, ale nie mogą one uzyskać do nich dostępu w efektywny sposób przy użyciu sprawdzonych metod dotyczących pamięci, które sprzyjają prywatności. W takich sytuacjach Android zapewnia specjalny dostęp do aplikacji o nazwie Dostęp do wszystkich plików.
Na przykład głównym zastosowaniem aplikacji antywirusowej może być regularne skanowanie wielu plików w różnych katalogach. Jeśli skanowanie wymaga wielokrotnych interakcji użytkownika w celu wybrania katalogów za pomocą systemowego okna wyboru plików, może to być dla niego uciążliwe. 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ń.
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_PERMISSION, aby przekierować użytkowników na stronę ustawień systemowych, na której mogą włączyć tę opcję dla Twojej aplikacji: Zezwól na zarządzanie wszystkimi plikami.
Aby sprawdzić, czy aplikacja ma przyznane uprawnienie MANAGE_EXTERNAL_STORAGE, wywołaj Environment.isExternalStorageManager().
Operacje dozwolone przez uprawnienie MANAGE_EXTERNAL_STORAGE
Uprawnienie MANAGE_EXTERNAL_STORAGE zapewnia te możliwości:
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 zarówno dysku USB On-The-Go (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 aplikacji należących do innych aplikacji, ponieważ te katalogi są wyświetlane jako podkatalogi
Android/data/w pamięci masowej.
Gdy aplikacja ma uprawnienie MANAGE_EXTERNAL_STORAGE, może uzyskiwać 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 uprawnienia MANAGE_EXTERNAL_STORAGE.
Wywołaj aktywność zarządzania pamięcią innej aplikacji
Na Androidzie 12 (poziom interfejsu API 31) i nowszych 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 niestandardowym miejscem w innej aplikacji.
Metoda getManageSpaceActivityIntent() przyjmuje nazwę pakietu i kod żądania, a następnie zwraca jedną z tych wartości:
PendingIntent, jeśli aplikacja o określonej nazwie pakietu ma zdefiniowaną niestandardową aktywność „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 przekierować użytkowników do aktywności niestandardowej.null, jeśli aplikacja o określonej nazwie pakietu nie definiuje aktywności „zarządzaj miejscem”.
Włączanie uprawnienia MANAGE_EXTERNAL_STORAGE na potrzeby testów
Aby sprawdzić, jak uprawnienie MANAGE_EXTERNAL_STORAGE wpływa na aplikację, możesz je włączyć 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 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, Sklep Google Play zaktualizował swoje zasady, aby oceniać aplikacje kierowane na Androida 11 (poziom API 30) lub nowszego i proszące o dostęp 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 linta widoczne na rysunku 1. To ostrzeżenie przypomina, że w Sklepie Google Play obowiązują zasady ograniczające korzystanie z uprawnień.
MANAGE_EXTERNAL_STORAGE.
O uprawnienie MANAGE_EXTERNAL_STORAGE proś tylko wtedy, gdy aplikacja nie może efektywnie korzystać z interfejsów API sprzyjających prywatności, 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 jednego z poniższych, 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 z urządzenia na urządzenie