Android 10 이상에서 레거시 외부 저장소 액세스가 비활성화 된 경우 프로그래밍 방식으로 테스트


12

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를 보았지만 더 이상 기사를 찾을 수 없습니다 ...


an app running on Android 10 or later must use Scoped Storage access? 그게 무슨 뜻인지 설명해 주실 수 있습니까? 어떤 기능을 생각하고 있습니까? 예를 들어 N으로 가져온 Storage Volumes 및 Storage Manager는 이미 Q에서 더 이상 사용되지 않습니다.
blackapps

나는 시스템에 의해, 또는 C / C ++ JNI 코드 fopen ( "filename.ext", mode)에 의해 앱에 할당 된 샌드 박스를 넘어 일반적인 Java 파일 액세스를 의미한다. 파일 경로가 시스템에서 할당 한 앱 디렉토리를 벗어나면 작동하지 않습니다 (액세스 거부). 매니페스트에서 android : requestLegacyExternalStorage = "true"를 사용하는 경우 이제 Android 10에서 작동하지만 임시 솔루션이며 내년에 완전히 비활성화 될 수 있습니다. 자세한 내용 예 : androidcentral.com/what-scoped-storage-android-q
gregko

이 기사에서도 범위가 지정된 스토리지가 무엇인지 명확하지 않습니다.
blackapps

@blackapps, 아마도이 기사에서 더 잘 설명 할 수 있습니다 : developer.android.com/training/data-storage/files/…
gregko

확인. 앱 전용 디렉토리에 대한 제한된 액세스.
blackapps

답변:


8

다음 두 가지 방법을 사용할 수 있습니다 android.os.Environment.

  • isExternalStorageLegacy(File path)

    지정된 경로의 공유 / 외부 저장 매체가 앱이 소유하지 않은 파일을 포함하는 레거시보기인지 여부를 리턴합니다.

  • isExternalStorageLegacy()

    기본 공유 / 외부 스토리지 미디어가 앱이 소유하지 않은 파일을 포함하는 레거시보기인지 여부를 반환합니다.

requestLegacyExternalStorage앱이 처음 설치된 시점에 따라 레거시 상태를 상속 할 수 있으므로이 값 은 앱의 매니페스트에서 요청한 값과 다를 수 있습니다 .

레거시가 아닌 앱은을 통해 다른 앱에 속한 미디어를 계속 검색하고 읽을 수 있습니다 MediaStore.

레거시 스토리지에 액세스 할 수 있다는 것을 알게되면 개인적으로 데이터를 범위가 지정된 스토리지로 마이그레이션하고 대신 레거시 스토리지가 경고없이 작동을 멈출 수 있으므로 대신 사용하는 것이 좋습니다.


1
감사합니다. @Zaffy, 이것이 제가 찾던 정답입니다. 완벽하게 작동하며 "스토리지 액세스"를 요구할 필요가 없습니다.
gregko
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.