ANDROID 6.0 이 실행 을 신청 할 때 FRAGMENT 에서 ONREQUESTPERMISSION SRESULT 에 대한 권한 을 되 돌리 지 않 는 문 제 를 해결 합 니 다.

2366 단어 androidPermissions
오늘 Fragment 가 실행 을 신청 할 때 카메라 권한 이 계속 바 뀌 지 않 았 습 니 다.어떻게 된 일 인지 모 르 겠 습 니 다.그리고 테스트 할 때마다 다시 설치 해 야 합 니 다.매우 귀 찮 습 니 다.
Fragment 에서 실 행 될 때 권한 의 특수 처리,Fragment 에서 권한 을 신청 하거나 Activity Compat.requestPermissions 를 사용 하지 마 십시오.Fragment 의 requestPermissions 방법 을 직접 사용 하지 않 으 면 Activity 의 onRequestPermissions Result 로 되 돌아 갑 니 다.
private void runPermission(){
    if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA)
            != PackageManager.PERMISSION_GRANTED) {
        //  WRITE_EXTERNAL_STORAGE  
        //ActivityCompat.requestPermissions(getActivity(),
        //        new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
        //       Fragment requestPermissions  
        requestPermissions(new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
    }else {
        startCamera();//          
    }
}

그리고 Fragment 에서 onRequestPermissions Result 방법 을 계승 합 니 다.
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == CAMERA_REQUEST_CODE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Permission Granted
            startCamera();//          
        } else {
            // Permission Denied
            Toast.makeText(getActivity(), "     !", Toast.LENGTH_SHORT).show();
        }
    }
}

Fragment 에 Fragment 를 끼 워 넣 고 하위 Fragment 에 request Permissions 방법 을 사용 하면 onRequestPermissions Result 가 되 돌아 오지 않 습 니 다.getParent Fragment().request Permissions 방법 을 사용 하 는 것 을 권장 합 니 다.이 방법 은 부모 Fragment 에 있 는 onRequestPermissions Result 로 되 돌아 갑 니 다.다음 코드 를 추가 하면 하위 Fragment 로 되 돌 릴 수 있 습 니 다.
@Override  
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {  
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);  
    List fragments = getChildFragmentManager().getFragments();  
    if (fragments != null) {  
        for (Fragment fragment : fragments) {  
            if (fragment != null) {  
                fragment.onRequestPermissionsResult(requestCode,permissions,grantResults);  
            }  
        }  
    }  
} 

좋은 웹페이지 즐겨찾기