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");