Java android应用程序中检查互联网连接的广播接收器

我正在开发一个用于检查互联网连接的Android广播接收器。

问题是我的广播接收器被调用了两次。我希望只有在网络可用时才能调用它。如果不可用,我不想收到通知。

这是广播接收器

public class NetworkChangeReceiver extends 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);

final android.net.NetworkInfo mobile = connMgr

.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

if (wifi.isAvailable() || mobile.isAvailable()) {

// Do something

Log.d("Network Available ", "Flag No 1");

}

}

}

这是manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.broadcastreceiverforinternetconnection"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="17" />

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

    <application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<receiver android:name=".NetworkChangeReceiver" >

<intent-filter>

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />

</intent-filter>

</receiver>

</application>

</manifest>

回答:

你的第一个问题的答案:你的广播接收器被调用两次是因为

你已经添加了两个 <intent-filter>

  1. 网络连接更改:

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

  1. WiFi状态更改:

<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />

只需使用一个:

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />。

它将仅响应一个动作,而不是两个。有关更多信息,请参见此处。

回答第二个问题(如果互联网连接可用,你希望接收方只打一次电话):

你的代码是完美的;你仅在互联网可用时通知。

更新

如果只想检查移动设备是否已与Internet连接,则可以使用此方法检查连接。

public boolean isOnline(Context context) {

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo netInfo = cm.getActiveNetworkInfo();

//should check null because in airplane mode it will be null

return (netInfo != null && netInfo.isConnected());

}

以上是 Java android应用程序中检查互联网连接的广播接收器 的全部内容, 来源链接: utcz.com/qa/412223.html

回到顶部