Android 广播接收机的近距离应用

Android 广播接收机的近距离应用,android,broadcastreceiver,Android,Broadcastreceiver,我是android编程新手。 我已尝试在活动中注册广播接收器,但当应用程序暂停时,我的接收器不工作。 所以我发现我需要在舱单上注册我的接收人 我的目标是在用户关闭Wifi后关闭我的应用程序一段时间 这是我的代码,但它不工作 public class ReceiverWifi extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) {

我是android编程新手。 我已尝试在活动中注册广播接收器,但当应用程序暂停时,我的接收器不工作。 所以我发现我需要在舱单上注册我的接收人

我的目标是在用户关闭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>

我如何实现我的目标

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()。有人有更好的解决方案吗?