首页 > 解决方案 > 当活动和/或应用程序关闭时保持广播接收器运行?

问题描述

我有一个活动,我可以点击一个按钮来启动一个BroadcastReceiver,它监听 wifi 连接的变化。现在,当活动显示或我离开应用程序(按主页按钮)时,活动显示接收器工作正常。但是,如果我结束活动或将应用程序作为一个整体终止(即在最近的任务列表中将其刷掉),则接收器将不再工作。我的活动结构(包括接收者)如下所示:

MainActivity.java

...

public class MainActivity extends AppCompatActivity {
...
    public BroadcastReceiver wifiStateReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
        ...
        }
    }
}

我已经阅读ServicesJobSchedulers认为我可能不得不使用其中之一来让我的接收器随时运行。我只是不知道如何实现这些。谁能向我解释如何做到这一点?BroadcastReceiver另外,将它包含在类中是一个好主意,MainActivity还是我应该在一个单独的类中定义它?

非常感谢!

标签: javaandroidbroadcastreceiverandroid-serviceandroid-jobscheduler

解决方案


根据文档,您正在创建一个上下文注册的接收器:

只要注册上下文有效,上下文注册的接收者就会接收广播。例如,如果您在 Activity 上下文中注册,只要该 Activity 未被销毁,您就会收到广播。如果您在应用程序上下文中注册,只要应用程序正在运行,您就会收到广播。

您可以在单独的文件中创建 BR 并将其注册到清单文件中,以便在匹配您的意图过滤器时调用它:

<receiver android:name=".wifiStateReceiver"  android:exported="true">
    <intent-filter>
       <action android:name="android.net.wifi.STATE_CHANGE" />
    </intent-filter>
</receiver>

当意图过滤器匹配时,您的 BR 中的 onReceive 方法将被调用。

public class wifiStateReceiver extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
      //do some quick processing and call an activity
   }
}

推荐阅读