저장 장치에 있는 모든 파일 관리

공유 저장소 액세스가 필요한 대다수 앱은 미디어 파일 공유미디어가 아닌 파일 공유 관련 권장사항을 준수할 수 있습니다. 그러나 일부 앱에는 기기의 파일에 광범위한 액세스가 필요하지만 개인 정보를 안전하게 보호하는 저장소 권장사항을 사용하여 효율적으로 작업을 실행할 수 없는 핵심 사용 사례가 있습니다. Android는 이러한 상황을 위해 모든 파일 액세스라는 특수 앱 액세스를 제공합니다.

예를 들어 바이러스 백신 앱의 기본 사용 사례에서는 여러 디렉터리에서 많은 파일을 정기적으로 검사해야 할 수 있습니다. 이 검사에서 시스템 파일 선택기를 사용하여 디렉터리를 선택하는 데 사용자 상호작용이 반복적으로 필요하다면 사용자 환경이 저하됩니다. 파일 관리자 앱, 백업 및 복원 앱, 문서 관리 앱과 같은 다른 사용 사례에도 이와 유사한 상황이 발생합니다.

모든 파일 액세스 권한 요청

앱은 다음을 실행하여 사용자에게 모든 파일 액세스 권한을 요청할 수 있습니다.

  1. 매니페스트에서 MANAGE_EXTERNAL_STORAGE 권한을 선언합니다.
  2. ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION 인텐트 작업을 사용하여 앱에 모든 파일 관리 액세스 허용 옵션을 사용 설정할 수 있는 시스템 설정 페이지로 사용자를 안내합니다.

앱에 MANAGE_EXTERNAL_STORAGE 권한이 부여되었는지 확인하려면 Environment.isExternalStorageManager()를 호출합니다.

MANAGE_EXTERNAL_STORAGE에서 허용되는 작업

MANAGE_EXTERNAL_STORAGE 권한은 다음을 부여합니다.

  • 공유 저장소 내 모든 파일 읽기 및 쓰기 액세스

  • MediaStore.Files 테이블 콘텐츠 액세스

  • 이동 중(OTG) USB 드라이브와 SD 카드 모두의 루트 디렉터리 액세스

  • 모든 내부 저장소 디렉터리에 대한⁠ 쓰기 액세스. 단, /Android/data/, /sdcard/Android 및 대부분의 /sdcard/Android 하위 디렉터리는 제외됩니다. 이 쓰기 액세스에는 직접 파일 경로 액세스가 포함됩니다.

    이 권한이 부여된 앱은 다른 앱에 속하는 앱별 디렉터리에 여전히 액세스할 수 없습니다. 이러한 디렉터리는 저장소 볼륨에서 Android/data/의 하위 디렉터리로 표시되기 때문입니다.

앱에 MANAGE_EXTERNAL_STORAGE 권한이 있으면 MediaStore API나 직접 파일 경로를 사용하여 이러한 추가 파일과 디렉터리에 액세스할 수 있습니다. 그러나 저장소 액세스 프레임워크를 사용할 때 MANAGE_EXTERNAL_STORAGE 권한이 없으면 파일이나 디렉터리에만 액세스할 수 있습니다.

다른 앱의 저장소 관리 활동 호출

Android 12(API 수준 31) 이상에서 MANAGE_EXTERNAL_STORAGE 권한과 QUERY_ALL_PACKAGES 권한이 모두 있는 앱(예: 파일 관리 앱)은 getManageSpaceActivityIntent()를 사용하여 사용자를 다른 앱의 맞춤 공간 관리 활동으로 보낼 수 있습니다.

getManageSpaceActivityIntent() 메서드는 패키지 이름과 요청 코드를 가져와 다음 중 하나를 반환합니다.

  • PendingIntent: 패키지 이름이 지정된 앱이 맞춤 '공간 관리' 활동을 정의한 경우 반환됩니다. 그러면 getManageSpaceActivityIntent() 메서드를 호출한 파일 관리 앱이 반환된 인텐트를 호출하여 사용자를 맞춤 활동으로 보낼 수 있습니다.
  • null: 패키지 이름이 지정된 앱이 '공간 관리' 활동을 정의하지 않는 경우 반환됩니다.

테스트용으로 MANAGE_EXTERNAL_STORAGE 사용 설정

MANAGE_EXTERNAL_STORAGE 권한이 앱에 미치는 영향을 알아보려면 테스트용으로 권한을 사용 설정할 수 있습니다. 권한을 사용 설정하려면 테스트 기기에 연결된 머신에서 다음 명령어를 실행합니다.

adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow

Google Play 알림

이 섹션에서는 Google Play에 앱을 게시하는 개발자에게 알림을 제공합니다.

광범위한 공유 저장소 액세스를 제한하기 위해 Google Play 스토어에서는 Android 11(API 수준 30) 이상을 타겟팅하고 MANAGE_EXTERNAL_STORAGE 권한을 통해 '모든 파일 액세스'를 요청하는 앱을 평가하는 정책을 업데이트했습니다. 이 정책은 2021년 5월부터 적용됩니다.

앱이 Android 11 이상을 타겟팅하고 MANAGE_EXTERNAL_STORAGE 권한을 선언하면 Android 스튜디오에서는 그림 1과 같이 린트 경고를 표시합니다. 이 경고는 Google Play 스토어에 권한 사용을 제한하는 정책이 있음을 알립니다.

그림 1. MANAGE_EXTERNAL_STORAGE 권한 관련 Google Play 정책을 개발자에게 알려 주는 Android 스튜디오의 린트 경고

앱에서 저장소 액세스 프레임워크Media Store API와 같이 개인 정보를 더 안전하게 보호하는 API를 효과적으로 사용할 수 없는 경우에만 MANAGE_EXTERNAL_STORAGE 권한을 요청해야 합니다. 앱의 권한은 허용된 용도로만 사용되어야 하며 앱의 핵심 기능과 직접적으로 연결되어야 합니다. 앱에 다음과 유사한 사용 사례가 포함되어 있는 경우 MANAGE_EXTERNAL_STORAGE 권한을 요청할 수 있습니다.

  • 파일 관리자
  • 백업 및 복원 앱
  • 바이러스 백신 앱
  • 문서 관리 앱
  • 기기 내 파일 검색
  • 디스크 및 파일 암호화
  • 기기 간 데이터 이전