Netowork广播接收器不适用于Android N.

时间:2017-02-20 18:17:18

标签: android broadcastreceiver android-7.0-nougat

我有一个广播接收器用于连接更改,它适用于在Android N下运行的所有设备,但它不能在Android N上运行。我无法找到任何与此相关的事情,无论它们是否在N中更改了某些内容。有人知道为什么会这样吗?

预告文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.admin.movies">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
    android:name=".MovieSingleton"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver
        android:name=".NetworkBroadcastReceiver"
        android:exported="false"
        android:enabled="true">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>
</application>

这是我的广播接收器

public class NetworkBroadcastReceiver extends BroadcastReceiver {

private static final String TAG = NetworkBroadcastReceiver.class.getSimpleName();

public NetworkBroadcastReceiver() {

}

@Override
public void onReceive(Context context, Intent intent) {
    Log.d(TAG, "onReceive: network change");
    if(isOnline(context)){
        Log.d(TAG, "onReceive: connected");
    } else {
        Log.d(TAG, "onReceive: not connected");
    }
}


public boolean isOnline(Context mContext) {
    ConnectivityManager connMgr = (ConnectivityManager)
            mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    return (networkInfo != null && networkInfo.isConnected());
}

}

1 个答案:

答案 0 :(得分:0)

由于许多应用程序注册接收此广播,因此单个网络交换机可以使它们全部唤醒并立即处理广播。

在Android Nougat中,您必须使用Context.registerReceiver()注册BroadcastReceiver。

此更改是Android 7.0后台优化和性能改进的一部分。