사진 및 동영상에 대한 일부 액세스 권한 부여

Android 14 기기에서 앱과 상호작용하는 사용자는 이제 앱이 Android 13(API 수준 33)에서 도입된 시각적 미디어 권한(READ_MEDIA_IMAGES 또는 READ_MEDIA_VIDEO)을 요청할 때 시각적 미디어 라이브러리(사진/동영상)에 대한 일부 액세스 권한을 부여할 수 있습니다.

새 대화상자에는 다음 옵션이 포함됩니다.

  • 사진 및 동영상 선택: Android 14의 새로운 기능입니다. 사용자가 앱에서 사용할 특정 사진과 동영상을 선택합니다.
  • 모두 허용: 사용자가 기기의 모든 사진 및 동영상에 대한 전체 라이브러리 액세스 권한을 부여합니다.
  • 허용 안 함: 사용자가 모든 액세스를 거부합니다.

사용자가 사진 및 동영상 선택을 선택하고 나중에 앱이 READ_MEDIA_IMAGES 또는 READ_MEDIA_VIDEO를 다시 요청하면 시스템은 다른 대화상자를 표시하여 사용자가 추가 사진 및 동영상에 대한 액세스 권한을 부여할 수 있도록 합니다.

앱이 새로운 변경사항을 지원하도록 돕기 위해 시스템에 새로운 권한 READ_MEDIA_VISUAL_USER_SELECTED가 도입됩니다.

새 권한 선언의 효과

READ_MEDIA_VISUAL_USER_SELECTED 권한을 선언하고 사용자가 시스템 권한 대화상자에서 사진 및 동영상 선택을 선택하면 다음과 같은 동작이 발생합니다.

  • READ_MEDIA_IMAGESREAD_MEDIA_VIDEO 권한이 모두 거부됩니다.
  • READ_MEDIA_VISUAL_USER_SELECTED 권한이 부여되어 사용자의 사진 및 동영상에 부분적으로 및 일시적으로 액세스할 수 있습니다.
  • 앱에서 다른 사진과 동영상에 액세스해야 한다면 READ_MEDIA_IMAGES 권한이나 READ_MEDIA_VIDEO 권한(또는 두 권한 모두)을 수동으로 요청해야 합니다.

READ_MEDIA_IMAGESREAD_MEDIA_VIDEO는 사용자의 사진 및 동영상 사진 라이브러리에 액세스하는 데 필요한 유일한 다른 권한입니다. READ_MEDIA_VISUAL_USER_SELECTED를 선언하면 권한 컨트롤러가 앱에서 더 많은 사진과 동영상을 선택하는 수동 재요청을 지원한다는 것을 인식합니다.

사용자에게 여러 시스템 런타임 대화상자가 표시되지 않도록 하려면 단일 작업에서 READ_MEDIA_VISUAL_USER_SELECTED, ACCESS_MEDIA_LOCATION, '미디어 읽기' 권한(READ_MEDIA_IMAGES, READ_MEDIA_VIDEO 또는 둘 다)을 요청하세요.

새 권한을 선언하지 않는 경우의 영향

READ_MEDIA_VISUAL_USER_SELECTED 권한을 선언하지 않으면 다음과 같은 동작이 발생합니다.

  • READ_MEDIA_IMAGESREAD_MEDIA_VIDEO 권한은 앱 세션 중에 부여되어 사용자가 선택한 사진 및 동영상에 대한 임시 권한 및 임시 액세스 권한을 제공합니다. 앱이 백그라운드로 이동하거나 사용자가 앱을 적극적으로 종료하면 시스템은 궁극적으로 이러한 권한을 거부합니다. 이 동작은 다른 일회성 권한과 비슷합니다.
  • 나중에 앱에서 추가 사진과 동영상에 액세스해야 한다면 수동으로 READ_MEDIA_IMAGES 권한이나 READ_MEDIA_VIDEO 권한을 다시 요청해야 합니다. 시스템은 초기 권한 요청과 동일한 흐름을 따라 사용자에게 사진 및 동영상을 선택하라는 메시지를 표시합니다.

기기가 업그레이드될 때 사진 및 동영상 액세스 권한이 유지됨

앱이 이전 Android 버전에서 Android 14로 업그레이드되는 기기에 있는 경우 시스템은 사용자의 사진과 동영상에 대한 전체 액세스 권한을 유지하며 앱에 일부 권한을 자동으로 부여합니다. 정확한 동작은 기기가 Android 14로 업그레이드되기 전에 앱에 부여되는 권한 집합에 따라 다릅니다.

Android 13의 권한

다음 상황을 고려해보세요.

  1. 앱이 Android 13을 실행하는 기기에 설치되어 있습니다.
  2. 사용자가 앱에 READ_MEDIA_IMAGES 권한과 READ_MEDIA_VIDEO 권한을 부여했습니다.
  3. 그런 다음 기기가 앱이 여전히 설치되어 있는 동안 Android 14로 업그레이드됩니다.

이 경우에도 앱은 사용자의 사진 및 동영상에 대한 전체 액세스 권한을 보유합니다. 시스템도 앱에 부여된 READ_MEDIA_IMAGESREAD_MEDIA_VIDEO 권한을 자동으로 유지합니다.

Android 12 이하 권한

다음 상황을 고려해보세요.

  1. 앱이 Android 13을 실행하는 기기에 설치되어 있습니다.
  2. 사용자가 앱에 READ_EXTERNAL_STORAGE 권한 또는 WRITE_EXTERNAL_STORAGE 권한을 부여했습니다.
  3. 그런 다음 기기가 앱이 여전히 설치되어 있는 동안 Android 14로 업그레이드됩니다.

이 경우에도 앱은 사용자의 사진 및 동영상에 대한 전체 액세스 권한을 보유합니다. 시스템도 READ_MEDIA_IMAGES 권한과 READ_MEDIA_VIDEO 권한을 앱에 자동으로 부여합니다.

권장사항

이 섹션에는 READ_MEDIA_VISUAL_USER_SELECTED 권한 사용을 위한 여러 권장사항이 포함되어 있습니다.

백그라운드 미디어 처리를 위해서는 기본적으로 새 권한이 필요함

앱이 백그라운드에서 미디어를 압축하거나 업로드하는 등의 미디어 처리를 실행하면 READ_MEDIA_IMAGESREAD_MEDIA_VIDEO 권한 상태가 최종적으로 다시 거부된다는 점에 유의하세요. READ_MEDIA_VISUAL_USER_SELECTED 지원을 추가할 것을 적극 권장합니다. 또는 앱에서 InputStream을 열거나 ContentResolver를 사용하여 쿼리하는 방식으로 특정 사진이나 동영상에 액세스할 수 있는지 확인해야 합니다.

권한 상태를 영구적으로 저장하지 않음

SharedPreferences 또는 DataStore를 포함하여 권한 상태를 영구적인 방식으로 저장하지 마세요. 저장된 상태가 실제 상태와 동기화되지 않을 수 있습니다. 권한 상태는 권한 재설정, 앱 최대 절전 모드, 앱 설정에서 사용자가 시작한 화면 후에 또는 앱이 백그라운드로 전환될 때 변경될 수 있습니다. 대신 ContextCompat.checkSelfPermission()을 사용하여 저장소 권한을 확인하세요.

사진 및 동영상에 대한 전체 액세스 권한이 있다고 가정하지 않음

Android 14에 도입된 변경사항에 따라 앱은 기기의 사진 라이브러리에 대한 일부 액세스 권한만 보유할 수도 있습니다. 앱이 ContentResolver를 사용하여 쿼리될 때 MediaStore 데이터를 캐시하는 경우 캐시가 최신 상태가 아닐 수 있습니다.

  • 저장된 캐시를 사용하는 대신 항상 ContentResolver를 사용하여 MediaStore를 쿼리합니다.
  • 앱이 포그라운드에 있는 동안 결과를 메모리에 유지합니다.

URI 액세스를 임시로 취급

사용자가 시스템 권한 대화상자에서 사진 및 동영상 선택을 선택하면 선택한 사진과 동영상에 대한 앱의 액세스 권한이 결국 만료됩니다. 앱은 권한과 관계없이 Uri에 액세스할 수 없는 경우를 항상 처리해야 합니다.