我有一个使用Wifi传输一些数据的应用程序。如果Wifi被禁用,我会出现一个对话框。该对话框有两个按钮:“是”和“否”。如果用户单击“是”,则启用wifi。如果用户点击“否”,应用应自行关闭。如何通过单击“否”按钮实际关闭应用程序?
注意:我使用不同的类(MainActivity除外)来执行wifi状态检查。
答案 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);