인프런 커뮤니티 질문&답변

김영진님의 프로필 이미지
김영진

작성한 질문수

모던 안드로이드 - Jetpack Compose 입문

전자액자 04 - 애니메이션 효과

전자액자에서 영상과 깃허브의 내용이 달라서 영상을 다보고 깃허브 내용으로 돌려봤는데 권한요청부터가 안됩니다.

해결된 질문

작성

·

90

0

에뮬레이터에서는 정상 작동을 하는데

제 핸드폰으로 돌리면 권한요청에서부터 안됩니다.

SDK는 아래와 같이 되어있고 제 핸드폰은 버전 14인데 이게 문제일까요?

namespace = "com.example.photoframe"
compileSdk = 34

defaultConfig {
    applicationId = "com.example.photoframe"
    minSdk = 28
    targetSdk = 34
    versionCode = 1
    versionName = "1.0"

    testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    vectorDrawables {
        useSupportLibrary = true
    }
}

답변 2

0

오준석님의 프로필 이미지
오준석
지식공유자

안드로이드 버전 14 기준으로 코드가 업데이트되어 있어서 잘 되어야 하는게 맞는데 이상하네요.

정보가 부족해서 그러는데요.

에뮬레이터와 실제 기기 모두 Android 14 (API 34) 가 맞는지.

혹시 Logcat 에 별다른 메시지는 없는지,

debug 모드로 실행하여 의심 지점에 브레이크포인트를 찍으면서 의심 부분을 찾아보시고 추가 정보를 주시면 좋을 것 같습니다.

김영진님의 프로필 이미지
김영진
질문자

오늘 다시 해보니 권한 요청을 받는 메뉴와 사진까지 고르는 것은 되는데 사진을 고르고 허용을 누르면 아무 반응이 일어나지 않습니다.

그리고 Logcat 에서는 아래와 같은 에러 코드 말고 다른 것들은 특이 사항이 없는 거 같습니다.

E  Failed to read message from agent control socket! Retrying: Bad file descriptor  

그런데 사진을 추가할 때 뜨는 에러 코드는 아닌 거 같습니다.

그리고 지금 보니 제한된 허용과 모두 허용에서 제한된 허용으로 사진 몇 장만 추가 하려고 할 때는 아무 것도 추가가 안되고 모두 허용일 때만 모든 사진이 전자 액자 어플에 다 추가 됩니다.

오준석님의 프로필 이미지
오준석
지식공유자

모두 허용을 했을 때 사진은 가지고 와 진다면, 일단은 이러한 방식으로 사진을 가져올 수 있다. 경험을 얻은 것으로 다음으로 넘어가셔도 무방합니다.

제가 제한된 사진 허용은 고려하지 않고 코드를 작성했습니다.

 

0

안녕하세요, 인프런 AI 인턴입니다.

질문자님의 상황을 고려했을 때, Android 13 버전(만약 질문자님의 “버전 14”가 실제로 Android API 레벨 33 혹은 그 이상을 의미하는 것이라면)에서 READ_EXTERNAL_STORAGE 권한이 deprecated 되면서 발생하는 문제로 보입니다. 안드로이드 13(API 레벨 33)부터는 READ_EXTERNAL_STORAGE 권한 대신 READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, 그리고 READ_MEDIA_AUDIO 권한을 사용해야 합니다. 따라서, 예전 버전의 권한 요청 방식이 안드로이드의 최신 버전에서 작동하지 않을 수 있습니다.

해당 문제와 관련하여 전자액자 READ_EXTERNAL_STORAGE 권한 deprecated 게시물이 있으며, 여기서는 READ_EXTERNAL_STORAGE 권한 대신 READ_MEDIA_IMAGES 권한을 사용할 것을 제안하고 있습니다. 권한 요청 코드를 다음과 같이 변경해볼 수 있습니다:

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>

그리고 자바 코드에서는 다음과 같이 권한을 요청합니다:

if (ContextCompat.checkSelfPermission(
        this,
        Manifest.permission.READ_MEDIA_IMAGES
    ) == PackageManager.PERMISSION_GRANTED
) {
    // 권한이 이미 부여된 경우
} else {
    // 권한 요청
}

만약 권한 요청이 안드로이드 기기에서 작동하지 않는다면, 이와 관련해서 권한 요청 로직을 최신 안드로이드 버전에 맞게 업데이트 해야 할 수 있습니다. 권한 요청 과정에서 특정 안드로이드 버전에서 추가적인 설정이 필요한 경우가 있으니, 해당 부분을 검토해보시는 것이 좋겠습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김영진님의 프로필 이미지
김영진

작성한 질문수

질문하기