티스토리 뷰

Android/자료정리

[Android]OS11(sdk30) 대응 파일 접근 권한, NPKI

감성개발자 썩소천사 2021. 10. 8. 15:40
반응형

11월부터 sdk30으로 올려서 배포해야한다.

이슈가 되는 부분은 휴대폰 정보, 저장소, 부분권한 정도가 될 것 같다.

1. 휴대폰 정보
android.permission.READ_PHONE_STATE 사용하던 것을
android.permission.READ_PHONE_NUMBERS 사용해야 한다.
sdk30으로 설정 했다면 android.permission.READ_PHONE_STATE 지워도 된다. 다만 몇몇 라이브러리가 오류를 낼 수 있다.
그래서 일단은 둘 다 선언 및 권한 체크를 하도록 했다.

2. 저장소
기존 sdk29에서 requestLegacyExternalStorage="true" 옵션을 넣어서 외부 저장소 접근을 허용했었는데, 이제 이 방법은 무효화된다. sdk30부터는 preserveLegacyExternalStorage="true" 옵션을 넣을 경우 기존 고객은 외부 읽기/쓰기가 가능하고 앱 삭제 후 재설치시 접근이 불가하다고 되어있다. 실제로 테스트까지 해보진 않았지만 이를 해결할 권한 또한 존재한다.

manifests.xml에 다음 권한을 추가하고

1
2
3
<uses-permission
    android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
    tools:ignore="ScopedStorage" />
cs

앱 실행 시 다음으로 권한을 체크하고 받으면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (Environment.isExternalStorageManager()) {
    // 권한 허용상태
}else{
    try {
        Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
        intent.addCategory("android.intent.category.DEFAULT");
        intent.setData(Uri.parse(String.format("package:%s",getApplicationContext().getPackageName())));
        startActivityForResult(intent, 1225);
    } catch (Exception e) {
        Intent intent = new Intent();
        intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
        startActivityForResult(intent, 1225);
    }
}
cs

"모든 파일에 접근 허용" 팝업이 보이며 허용 시 외부 폴더 읽기&쓰기가 가능해진다.

 

나머지는 차차 적어보도록 한다..

 

참고 사이트 : https://stackoverflow.com/questions/62782648/android-11-scoped-storage-permissions

반응형
댓글
댓글쓰기 폼
공지사항