单击对话框上的否定按钮时,是否可以关闭应用程序?

时间:2014-06-07 06:57:06

标签: android android-dialog

我有一个使用Wifi传输一些数据的应用程序。如果Wifi被禁用,我会出现一个对话框。该对话框有两个按钮:“是”和“否”。如果用户单击“是”,则启用wifi。如果用户点击“否”,应用应自行关闭。如何通过单击“否”按钮实际关闭应用程序?

注意:我使用不同的类(MainActivity除外)来执行wifi状态检查。

4 个答案:

答案 0 :(得分:1)

您的问题是您无法从已创建的此类访问您的活动。处理此问题的最佳方法是使用Listener接口。 它允许您在用户点击“No' No'在您的Activity类对话框中。

在您的类中创建一个界面,您可以在其中检测对话框No click:

public interface DialogWiFiListener {
    public void callback(int response);
}

DialogWiFiListener mDialogWiFiListener;

public void setDialogWiFiListener (DialogWiFiListener mDialogWiFiListener) {
    this.mDialogWiFiListener = mDialogWiFiListener;
}

当您声明使用此类时,您必须实例化DialogWiFiListener对象并调用方法setDialogWiFiListener,为其提供您的活动。同样在你的Activity中你必须实现yourClass.DialogWiFiListener,以便它监听事件。

要完成工作,您必须在用户在对话框中单击“否”时调用您创建的侦听器对象

mDialogWiFiListener.callback(-1);// give -1 to detect his click

然后在你的活动中你有这个:

    @Override
    public void callback(int response) { 
       if (response < 0) {
           // here you manage your work when user clicked No in dialog
           Intent startMain = new Intent(Intent.ACTION_MAIN);
           startMain.addCategory(Intent.CATEGORY_HOME);
           startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           startActivity(startMain);
           finish();
        }
    }

答案 1 :(得分:0)

它不是真的“聪明”但它应该有效:

android.os.Process.killProcess(android.os.Process.myPid());

答案 2 :(得分:0)

您只需调用您尝试关闭的活动/对话框的finish()方法即可。杀死应用程序可能会导致应用程序生命周期管理问题。

示例:

public class MyActivity extends Activity {
    /*
    * You must call the finish() method on an instance of 
    * the activity/dialog you want to close
    */
    public void closeActivity() this.finish();

}

finish()方法的实际调用会关闭应用程序,并通过所有Activity's Lifecyle corresponding methods

答案 3 :(得分:0)

另一种方式是通过清除顶部标志的系统主屏幕的意图。 它不会强制关闭您的应用程序,但应用程序将关闭给用户。

Intent startMain = new Intent(Intent.ACTION_MAIN);
        startMain.addCategory(Intent.CATEGORY_HOME);
        startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(startMain);