从广播接收器关闭应用程序

vin*_*try 5 android broadcastreceiver

我是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;

            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

我的清单:

<receiver android:name="com.example.wifimonitor.ReceiverWifi" >
    <intent-filter>
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

我如何实现我的目标?

kod*_*cha -1

您的广播接收器位于主要活动类别中?如果是这样,您可以保存应用程序的全局上下文,并稍后在广播接收器中将其关闭。

如果它位于服务或提供商上,只需在启动/注册它时向其发送应用程序的实例即可。然后从该实例调用 finish() 。

编辑:

尝试这个:

在您的主要活动中创建此公共方法:

   public static void closeActivity(){
        finish();
   }
Run Code Online (Sandbox Code Playgroud)

然后在您的广播接收器中调用此方法,如下所示:

   MainActivity.closeActivity();
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 ;)

  • 将“finish()”更改为“MainActivity.finish()”...或在“onCreat”中创建“私有静态上下文上下文;”,执行“context = this;”,然后在“closeActivity()”方法中你做`context.finish();` (2认同)