[android] Android M 권한 : onRequestPermissionsResult ()가 호출되지 않음

새로운 M 런타임 권한 시스템을 사용하도록 앱을 업데이트하고 있습니다. onRequestPermissionsResult ()를 제외하고 모두 작동합니다. 버튼 누름에 대한 권한을 확인해야하며 성공하면 문자 메시지를 보내십시오. 권한을 부여하면 대화 상자가 닫히지 만 버튼을 다시 누를 때까지 텍스트 보내기가 트리거되지 않습니다.

onRequestPermissionsResult () 메소드에서 디버그하고 중단 점을 설정했지만 결코 들어 가지 않습니다.

이 메소드가 먼저 호출됩니다.

    private void askForPermission() {
    String[] permissions = new String[]{Manifest.permission.SEND_SMS};
    ActivityCompat.requestPermissions(getActivity(), permissions, PERMISSIONS_CODE);
}

그리고 내 콜백은 다음과 같습니다.

    @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == PERMISSIONS_CODE) {
        for (int i = 0; i < permissions.length; i++) {
            String permission = permissions[i];
            int grantResult = grantResults[i];

            if (permission.equals(Manifest.permission.SEND_SMS)) {
                if (grantResult == PackageManager.PERMISSION_GRANTED) {
                    onPPSButtonPress();
                } else {
                    requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSIONS_CODE);
                }
            }
        }
    }
}

비슷한 문제가 발생한 사람이 있습니까? 이에 대한 도움을 주셔서 감사합니다. 감사



답변

나는 같은 문제에 부딪 쳤고 방금 해결책을 찾았습니다. 지원 라이브러리를 사용하는 경우 올바른 메소드 호출을 사용해야합니다. 예를 들면 다음과 같습니다.

  • AppCompatActivity에 있을 때는 ActivityCompat.requestPermissions 를 사용해야합니다 .
  • 에 때 android.support.v4.app.Fragment , 당신은 단순히 사용해야 requestPermissions을 (이 android.support.v4.app.Fragment의 인스턴스 방법입니다)

조각에서 ActivityCompat.requestPermissions를 호출하면 onRequestPermissionsResult 콜백이 호출됩니다.

도움이 되었기를 바랍니다!


답변

당신은 이것을 시도 할 수 있습니다 :

requestPermissions(permissions, PERMISSIONS_CODE);

프래그먼트에서이 코드를 호출하는 경우 고유 한 requestPermissions 메소드가 있습니다. 문제는 정적 메소드를 호출하는 것입니다.

onRequestPermissionsResult()조각에 원하는 경우 프로 팁 :
FragmentCompat.requestPermissions(Fragment fragment, String[] permissions, int requestCode)


답변

나는 그것이 잘 작동하기를 바랍니다

활동 :

 ActivityCompat.requestPermissions(this,permissionsList,REQUEST_CODE);

조각의 경우 :

 requestPermissions(permissionsList,REQUEST_CODE);


답변

이 문제도 발생했습니다. 히스토리 / 최근에없는 권한을 처리하는 활동을 원하는 경우AndroidManifest.xml 항목 받습니다.

당신이 활동을 설정하면 호출하는 것이 requestPermissionsAppCompatActivity.requestPermissions

android:noHistory="true"
android:excludeFromRecents="true"

당신의 AndroidManifest.xml그때에 onRequestPermissionsResult()호출되지 않습니다. 귀하의 활동이 Activity또는AppCompatActivity .

‘AndroidManifest.xml’에서 두 플래그를 모두 제거하고 finishAndRemoveTask()대신 활동을 완료하면이 문제를 해결할 수 있습니다 .


답변

당신이있는 경우 onRequestPermissionsResult활동과 조각 모두에서 전화로 확인 super.onRequestPermissionsResult활동한다. 프래그먼트에는 필요하지 않지만 활동 중입니다.


답변

더 이상 사용되지 않는 답변은 다음을 참조하십시오.
https://developer.android.com/training/permissions/requesting을

조각 안에서는 다음을 호출해야합니다.

FragmentCompat.requestPermissions(permissionsList, RequestCode)

아니:

ActivityCompat.requestPermissions(Activity, permissionsList, RequestCode);


답변

조각으로 requestPermissions를 사용하는 경우 3 대신 2 개의 매개 변수를 사용합니다.

사용해야합니다 requestPermissions(permissions, PERMISSIONS_CODE);