android Connectivity_Change broadcastreceiver没有得到一致的调用

时间:2016-05-24 05:00:15

标签: android

我正在尝试测试/实现丢失的网络用例。我有下面提到的代码。

我在Galaxy S6上运行它。我同时启用了移动数据和wifi。

要禁用网络,我打开“飞行模式”

我的问题是:

如果我从android studio重新启动应用程序,我会调用onReceive()。但是,在几次打开/关闭飞行模式后,我没有调用public class ConnectionChangeReceiver extends BroadcastReceiver { @Override public void onReceive( Context context, Intent intent ) { // get Connectivity Manager object to check connection ConnectivityManager connectivityManager =(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); // Check for network connections if ( activeNetInfo != null && activeNetInfo.isConnected()) { Intent newintent = new Intent(BroadcastedIntentFilters.INTERNET_CONNECTED); LocalBroadcastManager.getInstance(context).sendBroadcast(newintent); } } }

我在工作室设置断点以检查它是否被调用。

我错过了什么吗?

    <receiver
        android:name=".Network.ConnectionChangeReceiver"
        android:exported="true"
        android:label="NetworkConnection" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.wifi.STATE_CHANGE"/>
        </intent-filter>
    </receiver>


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

在清单文件

Sql.Sum(1)

2 个答案:

答案 0 :(得分:7)

在Android 5.0及更高版本中,您必须按connectivityManager.registerNetworkCallback监控更改,这与您应该在BroadcastReveiver收听的早期版本相比有所不同。

我写了一个简单的类,它支持所有Android版本,并允许监视更改并询问当前状态。

https://github.com/mklimek/network-availability

答案 1 :(得分:0)

我找到了该任务的一些链接: no. 1 no. 2

希望完全有效。 享受你的代码时间:)