我是android编程的新手。 我已尝试在活动中注册广播接收器,但当应用程序onPause时我的接收器无法正常工作。 所以我发现我需要在清单中注册我的接收器。
我的目标是在用户关闭Wifi后关闭我的应用程序一段时间。
这是我的代码但不起作用。
public class ReceiverWifi extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
MainActivity m = new MainActivity();
m.finish();
}
};
if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
int newWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
WifiManager.WIFI_STATE_UNKNOWN);
switch (newWifiState) {
case WifiManager.WIFI_STATE_DISABLED:
Toast.makeText(context, "Wi-fi Disconnected ",
Toast.LENGTH_SHORT).show();
handler.postDelayed(runnable, 15 * 1000);
break;
}
}
}
}
我的清单:
<receiver android:name="com.example.wifimonitor.ReceiverWifi" >
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
我如何实现目标?
答案 0 :(得分:3)
使用以下代码从BroadcastReceiver向MainActivity发送新意图:
Intent i = new Intent(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags (Intent.FLAG_ACTIVITY_SINGLE_TOP);
i.putExtra("close_activity",true);
context.startActivity(i);
MainActivity中的使用OnNewIntent如下:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if(intent.getBooleanExtra("close_activity",false)){
this.finish();
}
}
仅供参考,我还没有尝试过上面的代码,但是我有类似的代码。
答案 1 :(得分:0)
MainActivity m = new MainActivity();
m.finish();
当你说完成时,它不会从堆栈中清除,因为你没有先将活动加载到堆栈中。 MainActivity在这里不是活动,它只是代码中的一个类对象
在主要活动中有广播接收器,当接收完成活动时。不要用new创建实例。
答案 2 :(得分:0)
您的广播接收器是否属于主要活动类?如果是这样,您可以保存应用程序的全局上下文,稍后在广播接收器中关闭它。
如果它位于服务或提供商上,只需在启动/注册时向其发送应用实例。然后从该实例调用finish()。
修改强>
试试这个:
在您的主要活动中创建此公共方法:
public static void closeActivity(){
finish();
}
然后在您的广播接收器中调用此方法,如:
MainActivity.closeActivity();
希望它有所帮助;)