안드로이드(Android) Fragment에서 권한 요청시 onRequestPermissionsResult() 호출 되지 않을 때 해결방법
Fragment에서 권한 요청 이슈 처리
사용자에게 특정권한(가령,카메라)을 요구할 때 권한 허용 요청을 해야한다. 평소와 다름없이 Activity에서 하던 방식으로 호출을 하였다. 그러나 응답이 없었다. 로그를 찍어보아도 로그도 찍히지않았고, Logcat창에 오류도 표기되지 않았다.
확인결과 Activity에서 메소드 호출과 Fragment에서 호출하는 메소드 호출이 상이했다. 그것도 모르고 1시간 넘게 삽질 중이였다. Fragment에서 권한요청은 처음 해보는 것이였던 것이다.
■액티비티에서 호출할때 : ActivityCompat클래스 사용
if (ActivityCompat.checkSelfPermission(
getActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED )
{
//권한 허용상태인지 체크
ActivityCompat.requestPermissions( new String[]{Manifest.permission.CAMERA}, ZXING_CAMERA_PERMISSION);
}
■프레그먼트에서 호출할때 : ContextCompat 클래스 사용
if (ContextCompat.checkSelfPermission(
getActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED )
{ //권한 허용상태인지 체크
//프레그먼트에서 요청할때
requestPermissions( new String[]{Manifest.permission.CAMERA}, ZXING_CAMERA_PERMISSION);
}
onRequestPermissionsResult()메소드는 동일하게 사용한다.
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
//Log.d(DefaultSettings.TAG, "############ onRequestPermissionsResult grantResults.length : " + grantResults.length );
switch (requestCode) {
case ZXING_CAMERA_PERMISSION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//Log.d(DefaultSettings.TAG, "############ onRequestPermissionsResult : 권한 거부 ");
if(mClss != null) {
Intent intent = new Intent(getActivity(), mClss);
startActivity(intent);
getActivity().finish();
}
} else {
//Log.d(DefaultSettings.TAG, "############ onRequestPermissionsResult : 권한 거부 ");
//this.callGuideDialogUsingTimer(getResources().getString(R.string.info_info_text), getResources().getString(R.string.info_auth_text), 7000);
checkPermissionsGuide();
//Toast.makeText(getActivity(), "Please grant camera permission to use the QR Scanner", Toast.LENGTH_SHORT).show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
오늘 또 하나를 이렇게 삽질로 배우게된다. 하나 확실한 건, 삽질하면서 배운 건 기억속에서 오래간다는 거다.