打开系统位置设置后android对话框不会关闭

Posted

技术标签:

【中文标题】打开系统位置设置后android对话框不会关闭【英文标题】:android dialog wont close after opening system location settings 【发布时间】:2012-12-10 02:03:54 【问题描述】:

如果没有启用 gps 定位,我有一个对话框提示用户启用它。

打开设置后,用户启用 gps,然后从位置设置屏幕按返回按钮,他们会返回应用程序,但对话框仍然可见。

这是单击按钮的代码。

    // On pressing Settings button
    alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() 
        public void onClick(DialogInterface dialog,int which) 
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            mContext.startActivity(intent);
            dialog.dismiss();
        

    );

我的问题是为什么 dialog.dismiss() 不关闭对话框,我也尝试了 dialog.cancel() 得到相同的结果。打开设置屏幕后我应该做什么?

谢谢,

【问题讨论】:

【参考方案1】:

我的Activity 中有这段代码:

private void showLocationDisabledInfo() 
    final Context c = this;
    AlertDialog.Builder builder = new AlertDialog.Builder(c);
    builder.setMessage("TEST");
    builder.setPositiveButton("OK", new OnClickListener() 
        @Override
        public void onClick(DialogInterface dialog, int which) 
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            c.startActivity(intent);
        
    );
    builder.setNeutralButton(R.string.cancel, null);
    builder.create().show();

无论我点击什么按钮,它都会自动关闭对话框。它来自我的应用程序,并在具有 API 810 的设备以及运行 API 17 的模拟器上进行了测试。我们的代码之间的唯一区别(可能)是mContext 的值。请提供负责设置对话框和您所描述行为的环境的完整代码。

【讨论】:

谢谢。是的,我从网络教程中借了一些代码,它设置了这样的上下文: private final Context mContext;然后在几行之后设置它。删除“最终”解决了这个问题。我是java新手,它是如何工作的?如果它已经被定义为最终设置,我希望设置会导致错误? 是的,差不多。最终字段必须在声明或类构造函数中设置。将它们设置在其他任何地方或重新设置它们会导致编译时错误。最终局部变量必须在声明时设置并且不能重新设置。但要小心 - 如果有人将 mContext 声明为 final,也许他这样做是有原因的 ;)

以上是关于打开系统位置设置后android对话框不会关闭的主要内容,如果未能解决你的问题,请参考以下文章

进度对话框不会关闭

jQuery UI 对话框 - 关闭后不打开

jQuery UI对话框 - 关闭后无法打开

如何在android中显示位置设置对话框?

打开和关闭模式后,Dirtyforms 停止工作

关闭对话框后如何触发方法