안드로이드 개발을 처음하다보니 IOS 와 많이 달라 햇갈리네요. ㅜㅜ
주의할 점은 퍼미션 종류별 API 수준에 따라 퍼미션 설정하는 방법이 다르다는 거에 놀랍네요. 왜 이렇게 파편화 해놨을까? ㅡ.,ㅡ;
예들들어 READ_EXTERNAL_STORAGE 의 경우 SDK 33(Android 13) 이상에서는 3개로 세분화 되어 따로 처리해줘야 된다능..
READ_EXTERNAL_STORAGE가 아래 3가지로 쪼개졌....
Manifest.permission.READ_MEDIA_AUDIO,
Manifest.permission.READ_MEDIA_VIDEO,
Manifest.permission.READ_MEDIA_IMAGES,
퍼미션 설정시 4개를 전부 등록해 주고.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
아래처럼 버전을 구분해서 퍼미션 요청을 해야됩니다.
POST_NOTIFICATIONS 의 경우도 마찬가지... 퍼미션 사용시 항상 버전별로 다 확인해서 설정해야됨. 이하버전은 퍼미션 승인없이
자동승인된다고 하네요.. 신기하군..
String[] permission;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
// SDK 30 미만 (Android 11 미만)
permission = new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CALL_PHONE
};
ActivityCompat.requestPermissions(this, permission, ALL_PERMISSION);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// SDK 33 이상 (Android 13 이상)
permission = new String[]{
Manifest.permission.READ_MEDIA_AUDIO,
Manifest.permission.READ_MEDIA_VIDEO,
Manifest.permission.READ_MEDIA_IMAGES,
Manifest.permission.CALL_PHONE,
Manifest.permission.POST_NOTIFICATIONS
};
ActivityCompat.requestPermissions(this, permission, ALL_PERMISSION);
} else {
퍼미션 설정 후 퍼미션 승인 여부 확인은 아래 코드 참조하세요.
public final int ALL_PERMISSION = 1000;
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode != -1) {
switch (requestCode) {
case ALL_PERMISSION:
if(grantResults.length > 0) {
for(int i = 0 ; i < grantResults.length ; i++) {
switch (permissions[i]) {
case Manifest.permission.READ_MEDIA_IMAGES:
if(grantResults[i] == PackageManager.PERMISSION_GRANTED) {
// 승인됨
} else {
// 미승인
}
case Manifest.permission.READ_MEDIA_VIDEO:
if(grantResults[i] == PackageManager.PERMISSION_GRANTED) {
// 승인됨
} else {
// 미승인
}
case Manifest.permission.READ_MEDIA_AUDIO:
if(grantResults[i] == PackageManager.PERMISSION_GRANTED) {
// 승인됨
} else {
// 미승인
}
case Manifest.permission.CALL_PHONE:
if(grantResults[i] == PackageManager.PERMISSION_GRANTED) {
// 승인됨
} else {
// 미승인
}
case Manifest.permission.POST_NOTIFICATIONS:
if(grantResults[i] == PackageManager.PERMISSION_GRANTED) {
// 승인됨
} else {
// 미승인
}
}
}
}
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
[플랫폼별 API 수준 정보]
플랫폼버전 API 수준 버전 코드 Notes
'Android(Java)' 카테고리의 다른 글
[Android]안드로이드 xml에서 투명도 적용 (0) | 2024.02.22 |
---|---|
[Java] ActivityResultLauncher 사용 (0) | 2024.02.21 |
[Java] 홈버튼 및 백그라운드 앱 전체 보기시 이벤트 제어 (0) | 2024.02.14 |
[Java] 화면 켜짐 상태 유지 설정 / 해제 (0) | 2024.02.14 |
[Java] 캡쳐 방지 설정 / 해제 (0) | 2024.02.14 |