본문 바로가기
IT 꿀팁

안드로이드 13이상에서 변경되는 퍼미션 3가지와 퍼미션계의 히어로 상권이 형님의 "테드 퍼미션" 커스텀 작업하기 [3편]

by BiBLeg 2024. 1. 15.
반응형

안드로이드 13 테드퍼미션 설정
안드로이드 13 테드퍼미션 설정

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();
        }

}
반응형

댓글