Android API 29에서 외부 저장소에 액세스
나는 몇 가지 정리 도구를 얻으려고 노력하고 있습니다. 점점 더 많은 제조업체가 일부 "보안 이유"로 인해 루팅 장치를 금지하고 있으며 잠금 해제를 요청하지 않는 것이 금지되어 있습니다.
API 28 이후이 코드는 오류를 발생시킵니다.
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, 1); // Request permission or not, Will got same result
File rootFolder = Environment.getExternalStorageDirectory(); // That is working fine
rootFolder.listFiles(); // That will return null
물론입니다. 다음을 사용할 수 있습니다.
android:requestLegacyExternalStorage="true"
그러나 나는 미래에 죽을 것이라고 믿습니다.
그렇다면 SDCard를 관리하는 우아한 방법이 있습니까?
답변
안드로이드 10 Environment.getExternalStorageDirectory()및 Environment.getExternalStoragePublicDirectory()스토리지 경로하지만 경로가 읽거나 쓸 수 없습니다 반환합니다.
Android 10의 경우
android:requestLegacyExternalStorage="true"매니페스트 파일의 애플리케이션 태그에 추가하면 Environment.getExternalStorageDirectory () 및 Environment.getExternalStoragePublicDirectory ()에서 제공하는 경로를 계속 사용할 수 있습니다 . 런타임에 앱은Environment.isExternalStorageLegacy()요청이 완료되었는지 확인하기 위해 호출 할 수 있습니다 .또 다른 (알려지지 않은) 가능성 (Android 10에만 해당)은
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />매니페스트 파일 에 추가 하는 것입니다. 사용자는 앱의 고급 설정으로 이동하여에서 활성화해야Advanced settings Install unknown apps | Allow from this source합니다. 이것의 좋은 점은 사용자가 액세스 권한을 전환 할 수 있다는 것입니다. 사용자Settings.ACTION_APPLICATION_DETAILS_SETTINGS가 설정을 변경할 수 있는 인 텐트를 구현하면 사용자가 더 쉽게 설정할 수 있습니다. 재미있는 점은 Environment.isExternalStorageLegacy ()도 true를 반환한다는 것입니다.Android 11 용으로 컴파일하는 두 옵션은 Android 11 기기에서 작동하지 않습니다. (그러나 그들은 Android 10 장치에서 계속 작동합니다.) Environment.getExternalStorageDirectory () 및 Environment.getExternalStoragePublicDirectory ()의 경로는
usable again in read mode and very often in write mode too입니다. 그리고 이것은 단순히 File 클래스를 사용하여 Download 또는 Pictures 또는 DCIM / Camera와 같은 디렉토리의 내용을 다시 나열 할 수 있기 때문에 훌륭합니다. 그러나<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />매니페스트 파일에 추가 하고 인 텐트를 구현하면Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION이동식 마이크로 SD 카드에서도 모든 파일에 대한 읽기 / 쓰기 액세스 권한이 앱에 제공됩니다. (마지막으로 자신의 앱을 사용하여 자신의 Android 장치에서 자신의 마이크로 SD 카드를 읽고 쓸 수없는 Google 금지를 제거 할 수 있습니다).Environment.isExternalStorageManager()권한 설정 / 해제 여부를 확인하는 데 사용할 수 있습니다. Play 스토어에 앱을 업로드하지 않는 한 괜찮습니다.