드레:
코딩 뿌시기
드레:
전체 방문자
오늘
어제
  • 분류 전체보기 (268)
    • Python (74)
      • Python 기초 (42)
      • Numpy (8)
      • Pandas (22)
    • Machine Learning (31)
      • Machine Learning (1)
      • Deep Learning (27)
    • AWS (22)
      • RDS (3)
      • EC2 (9)
      • Lambda (8)
      • S3 (2)
    • MySQL (24)
    • Git (8)
    • Streamlit (12)
    • REST API (22)
    • Java (24)
    • Android (36)
    • Debugging (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • EC2
  • 네이버 API
  • API
  • 안드로이드 스튜디오
  • Streamlit
  • GET
  • CNN
  • Callback
  • tensorflow
  • flask
  • github
  • Lambda
  • Java
  • AWS Lambda
  • volley
  • 서버리스
  • fine tuning
  • 깃이그노어
  • aws s3
  • pandas
  • AWS
  • Ann
  • JWT
  • rest api
  • serverless
  • 딥러닝
  • Transfer Learning
  • 액션바
  • Retrofit2
  • Python

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
드레:

코딩 뿌시기

Android - 미디어 파일 사용 권한 선택 에러
Debugging

Android - 미디어 파일 사용 권한 선택 에러

2023. 2. 17. 17:06

https://donghyeok90.tistory.com/281

 

Android Studio - 카메라 or 갤러리에서 사진 가져오기 Cheet Sheet

1. fileprovider.xml 만들기 res - xml 에 XML Resource file을 추가 파일명은 fileprovider로 만들고 아래 코드를 복사해 넣는다. 2. Manifest 설정 AndroidManifest.xml에 다음 항목들을 추가해 넣는다. 의 authorities는 자

donghyeok90.tistory.com

 

이 포스팅에서 다룬 코드가 일부 환경에서는 정상적으로 동작하지 않았다.

'앨범에서 가져오기'를 선택하면 미디어 파일 접근 권한 설정을 물어보는 창이 나와야 하는데,

아무것도 나오지 않았다.

 

로그는 다음과 같이 나왔다.

 

코드는 아무리 살펴봐도 이상이 없는데 왜 동작하지 않지?

안드로이드스튜디오 재설치도 해봤지만 소용 없었다.

 

한참 시간이 걸려 결국 원인을 찾아냈다.

안드로이드 13의 변경사항으로 미디어 파일 접근 권한이 바뀌었다고 한다. 

 

 

세분화된 미디어 파일 권한

이 변경사항은 Android 13 이상(API 33 or higher)을 타겟팅하는 앱을 대상으로 적용됩니다.

주요 내용은 미디어 파일 전체에 접근할 수 있는 READ_EXTERNAL_STORAGE 권한이 더 이상 사용되지 않고, 3개 권한으로 분리되었습니다.

  • READ_MEDIA_IMAGES : 이미지, 사진 파일 접근 권한
  • READ_MEDIA_VIDEO : 비디오 파일 접근 권한
  • READ_MEDIA_AUDIO : 오디오 파일 접근 권한

따라서, 타겟 API가 33 이상인 앱은 READ_EXTERNAL_STORAGE를 사용하지 말고, 필요에 따라서 3개의 권한을 사용자에게 요청하셔야 합니다.

 

자세한 내용은 이 글을 참고하자.

 

 

그래서 바꿔 준 부분은 다음과 같다.

  • manifest의 허용할 권한을 READ_MEDIA_IMAGES로 변경

 

  • 권한 확인하는 부분의 코드를 변경

 

private void requestPermission() {
    if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
            Manifest.permission.READ_MEDIA_IMAGES)){
        Toast.makeText(MainActivity.this, "권한 수락이 필요합니다.",
                Toast.LENGTH_SHORT).show();
    }else{
        ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{Manifest.permission.READ_MEDIA_IMAGES}, 500);
    }
}

private boolean checkPermission(){
    int result = ContextCompat.checkSelfPermission(MainActivity.this,
            Manifest.permission.READ_MEDIA_IMAGES);
    if(result == PackageManager.PERMISSION_DENIED){
        return false;
    }else{
        return true;
    }
}

 

target API가 33이상일 때는 이렇게 하면 잘 동작한다.

 

'Debugging' 카테고리의 다른 글

OverflowError: Python int too large to convert to C long 해결법  (0) 2023.03.14
df.str.contains 사용 시 발생 에러 - ValueError: Cannot mask with non-boolean array containing NA / NaN values  (0) 2023.03.13
Android Studio 에러 - Emulator is already running  (0) 2023.02.09
Android Studio - TextView.setText() 에러  (0) 2023.01.30
포스트맨 에러 - Error: write EPROTO 64064520:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER:../../../../src/third_party/boringssl/src/ssl/tls_record.cc:242:  (0) 2023.01.17
    'Debugging' 카테고리의 다른 글
    • OverflowError: Python int too large to convert to C long 해결법
    • df.str.contains 사용 시 발생 에러 - ValueError: Cannot mask with non-boolean array containing NA / NaN values
    • Android Studio 에러 - Emulator is already running
    • Android Studio - TextView.setText() 에러
    드레:
    드레:

    티스토리툴바