Android 10 이상에서 실행되는 앱이 범위 스토리지 액세스를 사용해야하는지, 즉 일반 파일 액세스 인 “레거시 외부 스토리지”가 비활성화되어 있는지 알려주는 간단한 API 호출이 있습니까? AndroidManifest.xml의 앱이 섹션을 선언하더라도
android:requestLegacyExternalStorage="true"
향후 Google 정책 변경으로 인해 파일 액세스가 여전히 거부 될 수 있으므로이 값을 테스트하는 것은 쓸모가 없습니다. 내가 찾은 유일한 방법은 외부 저장소 루트 디렉토리를 읽을 수 있는지 테스트하는 것입니다.하지만이를 위해 앱은 먼저 저장소 권한을 요청해야합니다. 레거시 저장소가 비활성화되어 있으면 다른 용도로는 쓸모가 없습니다.
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.
}
한 번이 이것을 감지하는 새로운 API를 보았지만 더 이상 기사를 찾을 수 없습니다 …
답변
다음 두 가지 방법을 사용할 수 있습니다 android.os.Environment
.
isExternalStorageLegacy(File path)
지정된 경로의 공유 / 외부 저장 매체가 앱이 소유하지 않은 파일을 포함하는 레거시보기인지 여부를 리턴합니다.
isExternalStorageLegacy()
기본 공유 / 외부 스토리지 미디어가 앱이 소유하지 않은 파일을 포함하는 레거시보기인지 여부를 반환합니다.
requestLegacyExternalStorage
앱이 처음 설치된 시점에 따라 레거시 상태를 상속 할 수 있으므로이 값 은 앱의 매니페스트에서 요청한 값과 다를 수 있습니다 .레거시가 아닌 앱은을 통해 다른 앱에 속한 미디어를 계속 검색하고 읽을 수 있습니다
MediaStore
.
레거시 스토리지에 액세스 할 수 있다는 것을 알게되면 개인적으로 데이터를 범위가 지정된 스토리지로 마이그레이션하고 대신 레거시 스토리지가 경고없이 작동을 멈출 수 있으므로 대신 사용하는 것이 좋습니다.