![](/img/trans.png)
[英]Broadcast receiver not working when application close from task manager in lollipop
[英]Close application from broadcast receiver
我是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>
我如何实现目标?
使用下面的代码从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();
}
}
仅供参考,我没有尝试过上面的代码,但我有类似的代码工作。
MainActivity m = new MainActivity();
m.finish();
当你说完成时,它不会从堆栈中清除,因为你没有先将活动加载到堆栈中。 MainActivity不是活动,它只是代码中的一个类对象
在主要活动中有广播接收器,当接收完成活动时。 不要用new创建实例。
您的广播接收器是否在主要活动类中? 如果是这样,您可以保存应用程序的全局上下文,稍后在广播接收器中关闭它。
如果它位于服务或提供商上,只需在启动/注册时向其发送应用实例。 然后从该实例调用finish()。
编辑:
试试这个:
在您的主要活动中创建此公共方法:
public static void closeActivity(){
finish();
}
然后在你的广播接收器中调用这个方法,如:
MainActivity.closeActivity();
希望能帮助到你 ;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.