반응형
1. 임포트 선언하기
import android.Manifest;
2. 퍼미션 리스너 선언하기
PermissionListener permissionlistener = new PermissionListener() {
// 권한 허용시 동작
@Override
public void onPermissionGranted() {
// 그냥 앱 실행
}
// 권한 거부시 동작
@Override
public void onPermissionDenied(List<String> deniedPermissions) {
Toast.makeText(MainActivity.this, "권한 요청을 거부 했습니다.", Toast.LENGTH_SHORT).show();
finishAffinity();
}
};
3. OnCreate 안에 퍼미션 Create 구현하기
기존의 테드퍼미션 Create 구문에서 타깃 SDK 33인 TIRAMISU(혹은, 33) 이상인 경우를 IF 문으로 생성해서 조건을 달아준다.
메니페스트에서 권한 선언을 했던 READ_EXTERNAL_STORAGE 와 WRITE_EXTERNAL_STORAGE 권한을
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
아래와 같이 READ_MEDIA_IMAGES 와 READ_MEDIA_AUDIO 와 READ_MEDIA_VIDEO 로 변경 되었다고 생각하면 된다.
그리고 POST_NOTIFICATIONS 를 추가해 준다
Manifest.permission.POST_NOTIFICATIONS,
Manifest.permission.READ_MEDIA_IMAGES,
Manifest.permission.READ_MEDIA_AUDIO,
Manifest.permission.READ_MEDIA_VIDEO,
마지막으로 IF 문으로
타깃 SDK 33 이상을 위한 TIRAMISU와
SDK 23 이상 타깃을 위한 M 일 때의 조건으로 나누어서 설정을 해준다
package com.example.permissiontest;
import android.Manifest;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.widget.Toast;
import com.gun0912.tedpermission.PermissionListener;
import com.gun0912.tedpermission.normal.TedPermission;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
// 테드 퍼미션 리스너
PermissionListener permissionlistener = new PermissionListener() {
// 권한 허용시 동작
@Override
public void onPermissionGranted() {
// 그냥 앱 실행
}
// 권한 거부시 동작
@Override
public void onPermissionDenied(List<String> deniedPermissions) {
Toast.makeText(MainActivity.this, "권한 요청을 거부 했습니다.", Toast.LENGTH_SHORT).show();
finishAffinity();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 멀티퍼미션 호출
MultiPermissions();
} // onCreate method end here ==================
// 멀티 퍼미션 호출 메소드 안드로이드 13 이상
private void MultiPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// 테드 퍼미션 호출
TedPermission.create()
.setPermissionListener(permissionlistener)
.setRationaleTitle("") // 권한 요청 이유 설명 다이얼로그
.setRationaleMessage("")
.setDeniedMessage("모든 권한 요청을 허용 해 주셔야 이용 가능합니다. 아래의 [설정]버튼을 눌러 권한을 허용 해 주시기 바랍니다.")
.setPermissions(Manifest.permission.POST_NOTIFICATIONS,
Manifest.permission.READ_MEDIA_IMAGES,
Manifest.permission.READ_MEDIA_AUDIO,
Manifest.permission.READ_MEDIA_VIDEO,
Manifest.permission.INTERNET,
Manifest.permission.WAKE_LOCK,
Manifest.permission.FOREGROUND_SERVICE,
Manifest.permission.CAMERA
).check();
// 안드로이드 6.0 마시멜로 이상인 경우 테드 퍼미션 호출
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 테드 퍼미션 호출
TedPermission.create()
.setPermissionListener(permissionlistener)
.setRationaleTitle("") // 권한 요청 이유 설명 다이얼로그
.setRationaleMessage("")
.setDeniedMessage("모든 권한 요청을 허용 해 주셔야 이용 가능합니다. 아래의 [설정]버튼을 눌러 권한을 허용 해 주시기 바랍니다.")
.setPermissions(Manifest.permission.INTERNET,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.WAKE_LOCK,
Manifest.permission.FOREGROUND_SERVICE,
Manifest.permission.CAMERA
).check();
}
}
반응형