Unsplash의 Frank mckenna의 사진.
Android OS 수준의 최근 개선 사항을 보면 팀은 대부분 보안 및 개인 정보 보호에 중점을 둡니다. 예를 들어 Android에서 안전한 환경 설정 저장소를 제공하기 위해 팀은 최근 EncryptedSharedPreferences 라이브러리를 출시했습니다 . 위치 및 마이크와 같은 민감한 데이터 권한과 관련하여 앱이 해당 인스턴스에 대해서만 액세스 할 수있는 일회성 권한이 밝혀졌습니다.
마지막으로 스토리지와 관련하여 범위가 지정된 스토리지를 확보했습니다. 여기서 미디어의 전체 라이브러리 액세스는 Play Console에서 허용 된 앱에서만 사용할 수 있습니다.
문제
Android 스토리지 시스템에는 10 년이 지난 후에도 새로운 스토리지 시스템을 만드는 두 가지 문제가 있습니다.
- 그것은 꽤 많이 쉬운있는 모든 안드로이드 애플 리케이션을위한입니다
READ_EXTERNAL_STORAGE
및 WRITE_EXTERNAL_STORAGE
미디어 파일에 액세스하고 사용할 수있는 권한.
- 저장소 권한을 요청하는 대부분의 앱은 미디어 파일을 광범위하게 볼 필요가 없습니다. 미디어를 업로드하거나 시스템에 미디어 파일을 쓰려는 채팅 애플리케이션을 가져옵니다. 앱은 하나의 미디어 파일에만 액세스하면되지만 현재 생태계에서는 전체 미디어 컬렉션이 앱에 노출됩니다.
범위가 지정된 스토리지는 하루를 절약하기 위해 여기에 있습니다. 앱의 요구 사항에 따라 미디어 파일의 노출을 제한합니다. Android 10부터는 Play Console에서 허용 목록에 포함되지 않으면 전체 미디어 컬렉션에 액세스 할 수 없습니다. 또한 스토리지 권한 없이도 채팅 앱에서 미디어 파일에 액세스하고 시스템에 파일을 저장하는 것과 같은 간단한 작업을 수행 할 수있는 새로운 미디어 프레임 워크를 제공합니다.
모든 회사에 범위 지정 스토리지와 같은 새로운 변경 사항에 집중하는 데 전념하는 개발자가 충분하지는 않습니다. 따라서 Android 팀은 다음 Android 릴리스까지 새로운 범위가 지정된 저장소와 이전 기본 저장소 시스템을 모두 지원하기로 결정했습니다. 즉, API 레벨 29를 대상으로하는 앱 requestLegacyExternalStorage
은 이전 스토리지 시스템에서 작동하려면 매니페스트 파일에 플래그 를 포함해야 합니다. 보세요 :
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:requestLegacyExternalStorage="true"
android:theme="@style/AppTheme">
</application>
앞서 말했듯이 범위 지정 저장소를 사용하여 미디어에 액세스하는 방법에는 두 가지가 있습니다.
- 프로필 사진으로 저장하거나 이메일의 첨부 파일로 사용하기 위해 미디어 파일 만 필요한 앱입니다.
- 모든 미디어 파일에 액세스해야하는 앱 (예 : 음악 플레이어 및 파일 탐색기).
범위가 지정된 저장소를 사용하면 사용자가 선택한 미디어 파일 만 필요로하거나 (저장소에서 데이터 읽기) 미디어 파일을 저장소에 저장 (파일 쓰기)하는 앱이 쉽게 사용할 수 있습니다.
파일 읽기
여기서는를 사용하여 Intent
사용자가 미디어 파일을 선택할 수있는 새 활동을 시작하고에서 onActivityResult
파일을 가져올 수 있습니다 URI
. 보세요 :
ACTION_OPEN_DOCUMENT
지정된 유형의 미디어 파일을 사용자에게 제공하는 활동을 시작하는 작업으로 사용되며 사용자 선택에 따라 데이터를 사용할 수 있습니다 onActivityResult
(위에 표시된대로).
CATEGORY_OPENABLE
인 텐트에로 열 수있는 URI 만 필요함을 나타냅니다 contentResolver
.
파일 쓰기
파일 읽기와 동일합니다. 의도를 시작하고 onActivityResult
. 보세요 :
여기서 액션 유형을 제외하고는 모든 것이 위와 동일합니다. 우리가 사용하는 ACTION_CREATE_DOCUMENT
파일을 생성하고 되돌릴 수있는 시스템을 나타 내기 위해 URI
그것의, 그리고 우리는 또한 파일 형식을 지정해야합니다. 인 EXTRA_TITLE
텐트 의 플래그를 사용하여 파일 이름을 설정할 수도 있습니다.
시스템은이 파일을 앱의 개인 저장소 아래에 생성하므로 저장소 권한 없이도 파일에 액세스 할 수 있습니다. 이는 범위가 지정된 저장소의 놀라운 점입니다.
복잡한 사용법
음악 플레이어 및 파일 탐색기와 같은 앱의 경우 단일 파일에 액세스하는 것만으로는 기능이 충분하지 않습니다. READ_EXTERNAL_STORAGE
스토리지의 모든 파일에 액세스해야하므로 권한은 필수입니다. 다음 코드를 사용하여 파일 목록에 액세스 할 수 있습니다.
미디어 메타 데이터
범위가 지정된 저장소는 사용자의 위치 기록을 잠재적으로 노출 할 수있는 미디어의 메타 데이터를 보호하기위한 조치를 취했습니다. 따라서 범위 지정 저장소를 통해 액세스하는 미디어 파일은 앱에 필요한 권한이있는 경우에만 메타 데이터를 제공합니다.
읽어 주셔서 감사합니다.