앱을 실행하자마자 필요한 권한들을 한번에 요청하기 위한 코드
Multi Permission(멀티 퍼미션)을 사용한 다중 권한 요청
우선 AndroidManifiest에 필요한 권한들을 추가해줍니다.
https://developer.android.com/reference/android/Manifest.permission
Manifest.permission | Android Developers
developer.android.com
여기서 필요한 권한을 확인해주신 후 추가해주시면 됩니다
[ AndroidManifest.xml ]
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
저는 전화, 위치에 대한 권한을 추가해주었습니다(총 2개, 그 이상도 추가가 가능합니다)
권한에 대한 Class도 하나 생성해줍니다
[ PermissionSupport.java ]
public class PermissionSupport {
private Context context;
private Activity activity;
//요청할 권한 배열 저장
private String[] permissions = {
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.ACCESS_FINE_LOCATION
};
private List permissionList;
//권한 요청시 발생하는 창에 대한 결과값을 받기 위해 지정해주는 int 형
//원하는 임의의 숫자 지정
private final int MULTIPLE_PERMISSIONS = 1023; //요청에 대한 결과값 확인을 위해 RequestCode를 final로 정의
//생성자에서 Activity와 Context를 파라미터로 받아
public PermissionSupport(Activity _activity, Context _context){
this.activity = _activity;
this.context = _context;
}
//배열로 선언한 권한 중 허용되지 않은 권한 있는지 체크
public boolean checkPermission() {
int result;
permissionList = new ArrayList<>();
for(String pm : permissions){
result = ContextCompat.checkSelfPermission(context, pm);
if(result != PackageManager.PERMISSION_GRANTED){
permissionList.add(pm);
}
}
if(!permissionList.isEmpty()){
return false;
}
return true;
}
//배열로 선언한 권한에 대해 사용자에게 허용 요청
public void requestPermission(){
ActivityCompat.requestPermissions(activity, (String[]) permissionList.toArray(new String[permissionList.size()]), MULTIPLE_PERMISSIONS);
}
//요청한 권한에 대한 결과값 판단 및 처리
public boolean permissionResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
//우선 requestCode가 아까 위에 final로 선언하였던 숫자와 맞는지, 결과값의 길이가 0보다는 큰지 먼저 체크
if(requestCode == MULTIPLE_PERMISSIONS && (grantResults.length >0)) {
for(int i=0; i< grantResults.length; i++){
//grantResults 가 0이면 사용자가 허용한 것 / -1이면 거부한 것
//-1이 있는지 체크하여 하나라도 -1이 나온다면 false를 리턴
if(grantResults[i] == -1){
return false;
}
}
}
return true;
}
}
권한에 대한 요청을 불러올 Activity의 onCreate 부분에 권한에 대한 클래스를 활용할 함수를 만들어줍니다
[ MainActivity.java ]
public class MainActivity extends AppCompatActivity {
// 클래스 선언
private PermissionSupport permission;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
permissionCheck();
}
// 권한 체크
private void permissionCheck() {
// PermissionSupport.java 클래스 객체 생성
permission = new PermissionSupport(this, this);
// 권한 체크 후 리턴이 false로 들어오면
if (!permission.checkPermission()){
//권한 요청
permission.requestPermission();
}
}
// Request Permission에 대한 결과 값 받아와
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//여기서도 리턴이 false로 들어온다면 (사용자가 권한 허용 거부)
if (!permission.permissionResult(requestCode, permissions, grantResults)) {
// 다시 permission 요청
permission.requestPermission();
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
그 후 핸드폰을 실행해주시면 코드를 작성한 Activity 창이 열렸을때 아래 권한 요청 팝업이 뜹니다
거부를 누르게 되면 다시 요청하는 팝업이 뜨면서 아래 '다시 묻지 않음' 체크박스가 생성됩니다
여기서 '다시 묻지 않음' 체크박스 선택 후 거부를 하게되면 팝업창이 다시 뜨지 않으니 권한 허용이 꼭 필요한 기능을 사용시에 핸드폰 - 설정에 들어가 어플을 일일이 찾아주는 일이 없도록 settings.action_application_details_settings 를 통해 설정 - 앱 정보로 들어가 권한을 요청해주면 된다.
'앱 개발 > Java' 카테고리의 다른 글
[안드로이드] fragment 키보드(키패드) 내리기 (0) | 2022.01.13 |
---|---|
[안드로이드] 레이아웃 배경색 어둡게 (0) | 2022.01.03 |
안드로이드 DB 데이터 csv 파일로 추출 (0) | 2021.12.23 |
자바 16진수 문자 출력할때 ffff 출력 현상 + 쉬프트연산 및 계산 (0) | 2021.12.22 |
자바 비트 연산, 쉬프트 연산자 (0) | 2021.12.22 |