Czy istnieje proste wywołanie interfejsu API, które powiedziałoby mi, czy aplikacja działająca na Androidzie 10 lub nowszym musi korzystać z dostępu do Scoped Storage, czyli jeśli normalny dostęp do plików, czyli „Legacy Storage Storage” jest wyłączony? Pamiętaj, że nawet jeśli aplikacja w AndroidManifest.xml, sekcja zadeklarowała:
android:requestLegacyExternalStorage="true"
dostęp do pliku może nadal zostać zablokowany z powodu zmian zasad Google w przyszłości, więc testowanie tej wartości jest bezużyteczne. Jedyny sposób, jaki znalazłem, to przetestowanie, czy katalog główny pamięci zewnętrznej jest czytelny, ale w tym celu aplikacja musi najpierw poprosić o pozwolenie na przechowywanie, które jest bezużyteczne w przypadku jakichkolwiek innych rzeczy, jeśli starsza pamięć jest wyłączona.
public static boolean mustUseScopedStorage() {
// Impractical must first ask for useless Storage permission...
File exSD = Environment.getExternalStorageDirectory();
return !exSD.canRead(); // this test works only if Storage permission was granted.
}
Myślę, że kiedyś widziałem nowy interfejs API do wykrywania tego, ale nie mogę już znaleźć tego artykułu ...
źródło
an app running on Android 10 or later must use Scoped Storage access
? Czy możesz wyjaśnić, co masz na myśli? Jakie masz na myśli funkcje? Wiem, że na przykład woluminy pamięci i Menedżer pamięci, które zostały przyniesione dla N, są już przestarzałe dla Q.Odpowiedzi:
Możesz użyć tych dwóch metod z
android.os.Environment
:isExternalStorageLegacy(File path)
isExternalStorageLegacy()
Jeśli odkryjesz, że masz dostęp do starszej pamięci masowej, osobiście uważam, że lepiej jest po prostu migrować dane do pamięci masowej o określonym zasięgu i korzystać z niej zamiast tego, ponieważ starsza pamięć masowa może przestać działać bez ostrzeżenia.
źródło