无法在onResume()

时间:2017-07-17 09:58:00

标签: android android-dialog

我检查活动何时启动是否打开了位置服务,如果没有,我打开一个启动“启用位置活动”意图的对话框。一旦我从它返回,我正在检查该位置是否真的被启用,如果是,我正在解雇警报对话框。

理论上这应该有用,但是当我的活动恢复并致电dialog.dismiss()时,绝对没有任何事情发生。

我的代码如下 - :

public class LocationUtils {

private static AlertDialog dialog_ = null;

public static void checkAndEnableLocationServices(final Activity context) {
    LocationManager lm = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
    boolean gps_enabled = false;
    boolean network_enabled = false;

    try {
        gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    try {
        network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    System.out.println("gps_enabled = " + gps_enabled);
    System.out.println("network_enabled = " + network_enabled);

    if (!gps_enabled && !network_enabled) {
        // notify user
        AlertDialog.Builder builder = new AlertDialog.Builder(context);

        builder.setMessage("Location services are disabled");
        builder.setPositiveButton("Enable Location Services", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                // TODO Auto-generated method stub

                Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                context.startActivity(myIntent);
                //get gps
            }
        });
        builder.setNegativeButton("Exit", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                context.finish();
            }
        });
        //For future reference.
        AlertDialog dialog = builder.create();

        dialog_ = dialog;

        dialog.show();
    } else {
        if(dialog_!=null) {
            dialog_.dismiss();
        }
    }
}

}

在我的主要活动中,我有一个onResume回调,它执行以下操作 - :

@Override
protected void onResume() {
    super.onResume();
    System.out.println("Activity resume()");
    LocationUtils.checkAndEnableLocationServices(this);
}

我错过了什么?为什么对话没有关闭?代码不会丢失任何错误。这对我而言是一个WTF时刻。

2 个答案:

答案 0 :(得分:1)

您正在调用本地警报对话框的alertDialog.show方法。 替换代码,

   AlertDialog dialog = builder.create();
    dialog_ = dialog;

 dialog_ =  builder.create();
 dialog_.show

和onResume()

    if(dialog_!=null) {
        dialog_.dismiss();
    } 

答案 1 :(得分:0)

如果点击了正面按钮,则可以关闭对话框并在OnResume中显示,如果位置服务没有被加入