Java NetworkInfo无法正确响应运行牛轧糖的手机上的网络更改

Java NetworkInfo无法正确响应运行牛轧糖的手机上的网络更改,java,android,background-process,networkinfo,Java,Android,Background Process,Networkinfo,前言:这在运行6.0.1的手机上运行得很好。但在我运行7.1.1的手机上,情况并非如此,如下所示 build.gradle(模块:应用程序) AndroidManifest.xml <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <receiver android:name=".NetworkChangeReceiver" android

前言:这在运行6.0.1的手机上运行得很好。但在我运行7.1.1的手机上,情况并非如此,如下所示

build.gradle(模块:应用程序)

AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <receiver
        android:name=".NetworkChangeReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
    </receiver>
从连接WiFi和数据开始,我做了以下测试 关闭WiFi

打开WiFi:

关闭数据:

打开数据:

关闭WiFi,然后关闭数据:

关闭两者后,打开WiFi:

我对结果完全感到困惑。我在其他地方看到我应该在运行时绑定它,但是,我唯一的活动是Preferences活动。该应用程序不打算具有运行时UI,而是使用后台IntentService和通知。

根据

针对Android 7.0(API级别24)及更高版本的应用程序不会收到 如果他们声明了广播接收器,则连接性\u操作广播 在他们的舱单上。应用程序仍将接收连接操作 如果他们将其广播接收器注册到 并且该上下文仍然有效

因此,您需要做的是启动
服务
,创建广播接收器的新实例
networkchangerecever
,并使用注册它以将其收听到
android.net.conn.CONNECTIVITY\u CHANGE

registerReceiver(new NetworkChangeReceiver(), new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"))

我是从问题中来的。您不需要
JobService
或任何特定的服务。只要
服务
就可以了。嗨,朋友,如果你有任何解决方案,我也面临同样的问题,请把答案贴出来
public static void updateNetworkStatus(Context context) {
    final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
    if (activeNetwork == null) {
        Log.d(TAG, "NO CONNECTION INFORMATION");
        return;
    }
    if (activeNetwork.isConnected()) {
        Log.d(TAG, "WE ARE CONNECTED TO A NETWORK");
    } else {
        Log.d(TAG, "WE ARE NOT CONNECTED TO A NETWORK");
        return;
    }
    Log.d(TAG, "NETWORK TYPE: " + activeNetwork.getTypeName());
}
03-08 20:15:04.664 29796-29796/com.gesslar.threshvote D/NetworkUtil: NO CONNECTION INFORMATION
03-08 20:15:26.333 29796-29796/com.gesslar.threshvote D/NetworkUtil: WE ARE CONNECTED TO A NETWORK
03-08 20:15:26.333 29796-29796/com.gesslar.threshvote D/NetworkUtil: NETWORK TYPE: MOBILE
No log line written
No log line written
1) 03-08 20:17:13.029 29796-29796/com.gesslar.threshvote D/NetworkUtil: NO CONNECTION INFORMATION
2) No log line written
03-08 20:18:00.198 29796-29796/com.gesslar.threshvote D/NetworkUtil: NO CONNECTION INFORMATION
^ showed as soon as it started seeking for WiFi, but no further log line was written when WiFi became active.
registerReceiver(new NetworkChangeReceiver(), new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"))