Android 广播接收机的近距离应用
我是android编程新手。 我已尝试在活动中注册广播接收器,但当应用程序暂停时,我的接收器不工作。 所以我发现我需要在舱单上注册我的接收人 我的目标是在用户关闭Wifi后关闭我的应用程序一段时间 这是我的代码,但它不工作Android 广播接收机的近距离应用,android,broadcastreceiver,Android,Broadcastreceiver,我是android编程新手。 我已尝试在活动中注册广播接收器,但当应用程序暂停时,我的接收器不工作。 所以我发现我需要在舱单上注册我的接收人 我的目标是在用户关闭Wifi后关闭我的应用程序一段时间 这是我的代码,但它不工作 public class ReceiverWifi extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) {
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>
我如何实现我的目标
MainActivity m = new MainActivity();
m.finish();
当您说finish时,它不会从堆栈中清除,因为您没有首先将活动加载到堆栈中。
MainActivity在这里不是activity,它只是代码中的一个类对象
在mainactivity中设置广播接收器,当onreceive完成活动时。不要用new创建实例。您的广播接收器在主活动类中?如果是这样,您可以保存应用程序的全局上下文,稍后在广播接收器中将其关闭 如果它位于服务或提供商上,则在启动/注册应用程序时只需向其发送应用程序实例。然后从该实例调用finish() 编辑: 试试这个: 在主要活动中创建此公共方法:
public static void closeActivity(){
finish();
}
然后在广播接收器中调用以下方法:
MainActivity.closeActivity();
希望有帮助;) 使用下面的代码从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();
}
}
仅供参考,我没有尝试上述代码,但我有类似的代码工作。您是否在onPause()上编写了任何代码。如果是,请在onPause()上发布它没有代码我需要在另一个类中使用广播接收器,如何操作?我将ReceiverWifi作为一个新类,如何向其发送实例?我遇到以下错误:无法从类型ActivityChange
finish()
为MainActivity.finish()
对非静态方法finish()进行静态引用。。。或者创建一个私有静态上下文
在您的onCreat
中,您执行context=this
然后在closeActivity()
方法中执行context.finish()代码>@margabro它不适合我..:(给出相同的错误。我在“注释”中尝试了您的解决方案,然后它说无法解析方法finish();
如果我定义finish,它给出的方法不能从static引用非静态,如果我将finish声明为static,它给出的方法static,finish不能重写实例方法..)(:(它显然不起作用,finish是一种非静态方法,因为它在Instance上执行操作,如果没有Instance,则无法调用finish()。有人有更好的解决方案吗?