我希望我的应用程序仅在启用GPS时才能运行,而且到目前为止,我的活动中还有我的应用程序。
private LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setUpMapIfNeeded();
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
checkForGPS();
}
private void checkForGPS(){
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
alertDialog.setTitle(getResources().getString(R.string.gps_error_title));
alertDialog.setMessage(getResources().getString(R.string.gps_error_message));
alertDialog.setButton(getResources().getString(R.string.alert_button_turn_on), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);
}
});
if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
alertDialog.show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
checkForGPS();
}
现在我遇到了这个对话框的问题,因为它可以正常工作,但是我可以按下我的后退按钮而忽略它。我该如何解决这个问题?
答案 0 :(得分:2)
将对话框设置为不可取消。
alertDialog.setCancelable(false);
这样它只能用命令dismiss();
关闭您可以通过设置显示的对话框然后调用上面的命令来实现:
Dialog popup = alertDialog.show();
以后
popup.dismiss();
当屏幕旋转时,您还需要注意对话框,因为它会消失。最好的选择是在onSaveInstanceState
内部保存一个布尔值,然后在onCreate
内检查该状态。
答案 1 :(得分:1)
这里有两个选项:
您可以将警报设置为不可取消:
alertDialog.setCanceledOnTouchOutside(false); //This must be there. To avoid the alert getting dismissed on clicking outside the alert.
alertDialog.setCancelable(false); //This is optional if you are going for the next option. I would say in your case YOU SHOULDN'T DO THIS. I will explain why.
或者您可以覆盖alertDialogue中的后退按钮操作和finish()
活动。
alertDialog.setOnKeyListener(new Dialog.OnKeyListener() {
@Override
public boolean onKey(DialogInterface arg0, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
}
return true;
}
});
让我稍微说明为什么我做了第二个选项。根据您的问题,AlertDialogue中的按钮启动一个活动以提示用户打开GPS。当我们写这一行时:
alertDialog.setCancelable(false);
它实际上禁用了后退按钮。但是,用户将如何退出应用程序?后退按钮将被禁用,无法退出应用程序(警报上没有按钮退出,后退按钮被禁用)。因此,应该有一些方法让用户退出应用程序而无需使用主页按钮等。我希望你理解我的观点。