비콘 스캔을 위해 위치권한과 블루투스 권한이 꼭 필요합니다.
만약 사용자가 거부한경우 다시 물어보고 어떻게든 권한을 물어보고
권한을 거부하면 사용할 수 없다고 띄우고 계~속 권한 요구를 하고 싶습니다.
하지만 권한을 거부하면 권한요청(requestPermissions)을 해도 권한을 물어보지 않더라구요.
혹시 방법이 있을까요?
아래는 제가 사용했던 코드를 넣었습니다.
private static final int PERMISSIONS_REQUEST_CODE = 100;
//권한 추가
String[] permissions = new String[]{
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.BLUETOOTH_SCAN
};
checkPermissions(permissions);
public void checkPermissions(String[] permissions) {
ArrayList<String> targetList = new ArrayList<String>();
boolean isDenied = false;
for (int i = 0; i < permissions.length; i++) {
String curPermission = permissions[i];
int permissionCheck = ContextCompat.checkSelfPermission(this,curPermission);
if(permissionCheck == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, curPermission + " 권한 있음.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, curPermission + " 권한 없음.", Toast.LENGTH_SHORT).show();
if (ActivityCompat.shouldShowRequestPermissionRationale(this, curPermission)) {
Toast.makeText(this, curPermission + " 권한 설명 필요함.", Toast.LENGTH_SHORT).show();
targetList.add(curPermission);
} else {
targetList.add(curPermission);
}
}
}
if (targetList.size() == 0) return;
String[] targets = new String[targetList.size()];
targetList.toArray(targets);
ActivityCompat.requestPermissions(this, targets, PERMISSIONS_REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
boolean isDenied = false;
switch (requestCode) {
case PERMISSIONS_REQUEST_CODE: {
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "첫 번째 권한을 사용자가 승인함.",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "첫 번째 권한 거부됨.", Toast.LENGTH_SHORT).show();
isDenied = true;
}
if (isDenied) {
checkPermissions(permissions);
}
return;
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}