onRequestPermissionsResult wird im Dialogfragment nicht aufgerufen

Ich habe begonnen, an der Laufzeitberechtigung für Android M zu arbeiten. Hier stehe ich vor dem Problem, dass, wennrequestPermissions wird von @ aufgerufDialog Fragment Klasse dannonRequestPermissionsResult wird nicht im selben @ angerufDialog fragment Klasse. Doch wennrequestPermissions wird von @ aufgerufActivity Klasse oderFragment Klasse dannonRequestPermissionsResult -Methode wird in derselben Klasse aufgerufen.

Hier ist mein Beispielcode:

public class ContactPickerDialog extends DialogFragment {
    private static final int READ_CONTACTS_REQUEST_CODE = 12;
    private Context mContext;

    private void loadContact() {
        if(hasPermission(mContext, Manifest.permission.READ_CONTACTS)){
            new ContactSyncTask().execute();
        } else {
            this.requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, READ_CONTACTS_REQUEST_CODE);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        Logger.d("TAG", "dialog onRequestPermissionsResult");
        switch (requestCode) {
            case READ_CONTACTS_REQUEST_CODE:
                // Check Permissions Granted or not
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    new ContactSyncTask().execute();
                } else {
                    // Permission Denied
                    Toast.makeText(getActivity(), "Read contact permission is denied", Toast.LENGTH_SHORT).show();
                }
            break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

    private static boolean hasPermission(Context context, String permission){
        return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
    }

} 

Hier im Code rufe ichrequestPermissions Methode vonDialog Fragment Klasse. Ich erwarte also ein Ergebnis in derselben Klasse.

Jede Hilfe wird gebeten. Danke im Voraus

BEARBEITEN Hier füge ich mehr Details hinzu, damit es für andere hilfreicher wird. Bisher habe ich getChildFragmentManager () verwendet, um das DialogFragment anzuzeigen.

ContactPickerDialog dialog = new ContactPickerDialog();
dialog.show(getChildFragmentManager(), "Contact Picker");

Aber@ CommonWare hat mich gebeten, die Aktivität zum Anzeigen des DialogFragments zu verwenden. Ich habe folgende Änderungen vorgenommen und es funktioniert.

ContactPickerDialog dialog = new ContactPickerDialog();
dialog.show(getActivity().getSupportFragmentManager(), "Contact Picker");

Antworten auf die Frage(20)

Ihre Antwort auf die Frage