2017-07-17 63 views
1

我检查活动何时启动位置服务是否打开,如果没有打开启动“启用位置活动”意图的对话框。一旦我从它返回,我正在检查该位置是否真的被启用,如果是的话,我正在关闭警报对话框。无法在onResume()后关闭AlertDialog()

理论上这应该可行,但是当我的活动恢复时,并且打电话给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时刻。

回答

1

你呼吁alertDialog.show本地警告对话框的方法。 与

dialog_ = builder.create(); 
dialog_.show 

和的onResume()替换代码,

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

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

呦可以关闭对话框时肯定按钮点击,在显示的onResume,如果位置服务不enambled

+0

没有工作。已经试过了 –