次の画像のように、ACCESS_FINE_LOCATION権限を要求する方法に関するAndroid 6.0アプリケーションのサンプルを開発しています。 IllegalStateException - DialogFragment.show()メソッドを呼び出すときにonSaveInstanceStateの後にこのアクションを実行できません。
は、私は、ユーザーのカスタムダイアログに表示するオプションをDENY選択するとき、それは次の例外をスロー:メソッドを呼び出したときにスローされるIllegalStateException - Can not perform this action after onSaveInstanceState
:
grantPermissionDialog.show(getSupportFragmentManager(),"GrantPermissionDialog");
onRequestPermissionsResultメソッド内
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == REQUEST_ACCESS_FINE_LOCATION){
if(grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "Location permission granted", Toast.LENGTH_LONG).show();
}else{
grantPermissionDialog.show(getSupportFragmentManager(),"GrantPermissionDialog");
}
}
}
これは、getSupportFragmentManager()
メソッドが呼び出されたためです。 ここに私のGrantPermissionDialogコードです。
public class GrantPermissionDialog extends DialogFragment {
private int statusCode;
private String message="El permiso de ubicación es necesario para que esta aplicación funcione.";
private String positiveButtonText="Salir";
private String negativeButtonText="Solicitar permiso";
public static int EXIT_APPLICATION=0;
public static int REQUEST_PERMISSION=1;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(message);
builder.setPositiveButton(positiveButtonText, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
statusCode = EXIT_APPLICATION;
}
});
builder.setNegativeButton(negativeButtonText, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
statusCode = REQUEST_PERMISSION;
}
});
return builder.create();
}
public int getStatusCode() {
return statusCode;
}
}
この問題を解決する方法上の任意のアイデアは?
エラーログも追加します –