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

标签 android broadcastreceiver

我是 Android 编程的新手。 我试过在 Activity 中注册广播接收器,但当应用程序暂停时我的接收器不工作。 所以我发现我需要在 list 中注册我的接收器。

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

            }
        }

    }
}

我的 list :

<receiver android:name="com.example.wifimonitor.ReceiverWifi" >
    <intent-filter>
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver>

我如何实现我的目标?

最佳答案

使用下面的代码从 BroadcastReceiver 向 MainActivity 发送新的 Intent :

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();

    }
}

仅供引用,我没有尝试过上面的代码,但我有类似的代码。

关于android - 从广播接收器关闭应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26134560/

相关文章:

android - 无法接收 Android GCM 中服务器发送的消息

android - 如何从服务中检测 youtube 的 MediaPlayer 事件

android - com.google.firebase.iid.FirebaseInstanceIdReceiver 是否需要导出?

c# - Xamarin.Forms(Android)蓝牙间歇性工作

java - 如何显示 ArrayList<Bitmap> 中的图像 (SQLlte)

Android : Intercept network calls (HTTP, HTTPS 等..)源 self 的应用程序内的第 3 方库

android - EditText - 文本和 EditText 行之间的间隙

android - 将数组存储到对象数据类型到 android 和 iOS 中的 firestore(swift)

android - adb shell 的 BroadcastReceiver 权限

android - AlarmManager 在模拟器中触发但不在物理设备上触发