我的Andorid应用程序每次恢复时都会检查位置服务设置,然后向用户显示弹出窗口,以便在禁用时启用它。这是代码:
AlertDialog.Builder dialog = new AlertDialog.Builder(context,AlertDialog.THEME_DEVICE_DEFAULT_DARK);
dialog.setCancelable(false);
dialog.setTitle("Location Services Disabled");
dialog.setMessage("This app needs location services to be enabled. We recommend to keep it on");
dialog.setPositiveButton("Enable", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
//paramDialogInterface.cancel();
paramDialogInterface.dismiss();
Intent myIntent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS );
context.startActivity(myIntent);
}
});
dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
finish();
}
});
dialog.show();
问题:
答案 0 :(得分:0)
提供完整的源代码。正在发生的对话被解雇,但在返回活动后,您再次显示对话框!检查你的状况!
答案 1 :(得分:0)
而不是'startActivity'
您应该构建Intent
并使用**startActivityForResult()**
和“请求代码”
像这样。
startActivityForResult(myIntent , YOUR_ENABLE_LOCATION_REQUEST_CODE);
然后在你的
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == YOUR_ENABLE_LOCATION_REQUEST_CODE) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
// The user came back from the Enable Location Activity
// Dismiss the Dialog
}
}
}
请记住,如果您只想解除对话,即使用户没有启用它,您也可以随时拨打dialog.Dismiss();
上的onActivityResult();
如果您需要有关如何使用此功能的更多信息,请始终参阅Android文档here
答案 2 :(得分:0)
您无需以编程方式关闭对话框,因为这是在处理对话框中单击按钮后的默认行为。
您很可能在 onResume 或 onStart 方法中显示对话框。因此,无论何时调用其中一个生命周期方法(从“设置”返回时),都会显示对话框。如果是这种情况,那么最简单的解决方案是将这些代码移出这些生命周期方法并重构逻辑以显示对话框。