当我的应用程序在后台运行时,如何检测网络状态/ wifi状态已更改?

时间:2018-09-11 23:46:43

标签: android android-wifi android-broadcastreceiver android-networking android-background

我试图弄清楚当我的应用程序在后台时如何检测wifi状态变化。 总结一下我的问题。 在我的活动中,我注册了一个接收器OnStart():

IntentFilter networkIntent = new IntentFilter();
        networkIntent.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkIntent.addAction("android.net.wifi.WIFI_STATE_CHANGED");
        registerReceiver(wifichangereceiver, networkIntent);

然后定义我的wifichangereceiver fn:

 public final BroadcastReceiver wifichangereceiver = new BroadcastReceiver() {


        @Override
        public void onReceive(final Context context, final Intent intent) {
            final ConnectivityManager connMgr = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);

            final android.net.NetworkInfo wifi = connMgr
                    .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

            if (wifi.isConnected()) {
                isConnectedtoWifi = true;


                if (MyCallisInConnectedState()) {
                    onNetworkStateChanged(true);
                }

            } else {
                isConnectedtoWifi = false;

            }
        }
    };

我在Onstop()中注销了它:

unregisterReceiver(wifichangereceiver);

但是,此机制仅在应用程序处于前台时才起作用,因为我正在活动本身中进行注册和注销。当通话也在后台(或可能不在通话中)时,有没有更简单的方法来监视wifi状态?我尝试在清单中添加一个接收器,但不确定这是否正确。我想知道无线状态何时更改。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用JobSchedulerJobService进行连接更改。

查看此答案

https://stackoverflow.com/a/48658403/4564200

https://stackoverflow.com/a/37289411/4564200

答案 1 :(得分:0)

如果您的应用定位到API级别26或更高级别,则即使用户未与应用进行交互,您也必须使用前台服务来执行任何长时间运行的任务。自Android Oreo以来,当应用本身不在前台时,系统会对运行后台服务施加限制。为了在后台执行短暂的任务,您的应用应改为使用scheduled job

您可以参考this培训文档以了解其如何满足您的要求。