Notice
Recent Posts
Recent Comments
Link
투케이2K
16. (AndroidStudio/android/java) 다중 퍼미션 (multi permissions) 요청 및 응답 처리 실시 본문
Android
16. (AndroidStudio/android/java) 다중 퍼미션 (multi permissions) 요청 및 응답 처리 실시
투케이2K 2021. 1. 21. 17:44/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : AndroidStudio
개발 언어 : java
/* =========================== */
/* =========================== */
[소스 코드]
<!-- ====== 퍼미션 등록 ====== -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
//TODO ====== 다중 퍼미션 데이터 선언 ======/
/** [사용 방법]
* 1. permissionArray 배열에 퍼미션 허용 받을 데이터를 담는다
* 2. getPermissionCheck() 메소드를 호출해서 퍼미션 허용 여부를 확인한다
* 3. getPermissionOK() 메소드에 모든 퍼미션이 허용된 경우 수행할 로직을 작성하면된다
*/
String[] permissionArray = {
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA
};
//TODO ====== 정상 모든 퍼미션 허용 시 수행 메소드 ======/
public void getPermissionOK(){
try {
//TODO ==== 내용 작성 ====
}
catch (Exception e){
e.printStackTrace();
}
}
//TODO ====== 다중 퍼미션 확인 메소드 ======/
public void getPermissionCheck(){
try {
ArrayList <String> permissionOK = new ArrayList(); //퍼미션 허용된 값을 담는다
ArrayList <String> permissionNO = new ArrayList(); //퍼미션 거부된 값을 담는다
if(permissionArray.length > 0){
int check = 0;
for (String data : permissionArray) { //매니페스트에 등록된 허용받을 퍼미션이 허용되었는지 확인한다
check = ContextCompat.checkSelfPermission(A_Alert.this, data);
if (check != PackageManager.PERMISSION_GRANTED) { //권한이 부여되지 않았을 경우
permissionNO.add(data);
}
else { //퍼미션 권한이 부여 되었을 경우
permissionOK.add(data);
}
}
Log.d("---","---");
Log.w("//===========//","============");
Log.d("","\n"+"[퍼미션 허용된 리스트 : "+permissionOK.toString()+"]");
Log.d("","\n"+"[퍼미션 거부된 리스트 : "+permissionNO.toString()+"]");
Log.w("//===========//","============");
Log.d("---","---");
if(permissionNO.size() > 0){ //TODO 퍼미션 거부된 값이 있을 경우
ActivityCompat.requestPermissions(A_Alert.this, permissionNO.toArray(new String[permissionNO.size()]), MULTI_PERMISSION);
}
else { //TODO 모든 퍼미션이 허용된 경우 [메소드 호출]
//Toast.makeText(getApplication(),"모든 퍼미션이 허용되었습니다 !!! ",Toast.LENGTH_SHORT).show();
getPermissionOK(); //메소드 호출
}
}
else {
Toast.makeText(getApplication(),"퍼미션 허용을 확인할 데이터가 없습니다 ... ",Toast.LENGTH_SHORT).show();
}
}
catch (Exception e){
e.printStackTrace();
}
}
final int MULTI_PERMISSION = 999;
ArrayList <String> permissionNoRealTime = new ArrayList(); //실시간 퍼미션 거부된 값을 담는다
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case MULTI_PERMISSION: {
if (grantResults.length > 0) { //퍼미션 권한이 부여되지 않는 배열 길이가 0보다 클경우
if(permissionNoRealTime.size() > 0){
permissionNoRealTime.clear();
}
for (int i = 0; i < permissions.length; i++) { //배열을 순회하면서
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { //권한이 부여되어 있지 않을 경우 확인
permissionNoRealTime.add(permissions[i]);
}
}
Log.d("---","---");
Log.e("//===========//","============");
Log.d("","\n"+"[실시간 퍼미션 거부된 리스트 : "+permissionNoRealTime.toString()+"]");
Log.e("//===========//","============");
Log.d("---","---");
if(permissionNoRealTime.size() > 0){ //TODO 실시간으로 권한 허용이 거부된 값이 있을 경우
String Tittle = "퍼미션 허용 확인";
String Message = "퍼미션을 허용해야 정상 이용가능합니다"+"\n"
+"[설정>권한]에서 퍼미션을 허용하시거나, "+"\n"
+"앱을 재실행해 권한을 허용해주세요";
String buttonNo = "종 료";
String buttonYes = "설 정";
new AlertDialog.Builder(A_Alert.this)
.setTitle(Tittle) //팝업창 타이틀 지정
//.setIcon(R.drawable.ic_launcher_foreground) //팝업창 아이콘 지정
.setMessage(Message) //팝업창 내용 지정
.setCancelable(false) //외부 레이아웃 클릭시도 팝업창이 사라지지않게 설정
.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
/** ==== [애플리케이션 정보 창 이동하기] ==== */
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
overridePendingTransition(0,0);
}
})
.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
try {
finishAffinity();
overridePendingTransition(0,0);
//android.os.Process.killProcess(android.os.Process.myPid());
}
catch (Exception e){
e.printStackTrace();
}
}
})
.show();
}
else { //TODO 실시간으로 모든 권한이 허용된 경우 [메소드 호출]
getPermissionOK(); //메소드 호출
}
}
return;
}
}
}
/* =========================== */
[결과 출력]
/* =========================== */
/* =========================== */
[요약 설명]
* 1. permissionArray 배열에 퍼미션 허용 받을 데이터를 담는다
* 2. getPermissionCheck() 메소드를 호출해서 퍼미션 허용 여부를 확인한다
* 3. getPermissionOK() 메소드에 모든 퍼미션이 허용된 경우 수행할 로직을 작성하면된다
/* =========================== */
반응형
'Android' 카테고리의 다른 글
Comments