for*_*ill 6 android broadcastreceiver
我的清单中有以下内容
<receiver android:name=".receiver.WifiReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
和以下的BroadcastReceiver:
public class WifiReceiver extends BroadcastReceiver {
private static String TAG = makeLogTag(WifiReceiver.class);
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = null;
if (connectivityManager != null) {
networkInfo =
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
LOGD(TAG, "connectivity info:" + networkInfo);
}
if(networkInfo != null && networkInfo.isConnected()) {
//TODO: see why this is called multiple times and handle schedule reloading
LOGD(TAG, "have Wifi connection and is connected");
}else
LOGD(TAG, "don't have Wifi connect or it isn't connected");
}
Run Code Online (Sandbox Code Playgroud)
当我从移动设备切换到wifi时,接收器被多次调用(没有问题),但
if(networkInfo != null && networkInfo.isConnected())分支的评估结果为真4次
public class NetworkChangeReceiver extends BroadcastReceiver {
Context mContext;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
String status = NetworkUtil.getConnectivityStatusString(context);
Log.e("Receiver ", "" + status);
if (status.equals("Not connected to Internet")) {
Log.e("Receiver ", "not connction");// your code when internet lost
} else {
Log.e("Receiver ", "connected to internet");//your code when internet connection come back
}
}
Run Code Online (Sandbox Code Playgroud)
}
并使用此呼叫检查wifi或Internet连接丢失
public class NetworkUtil {
public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 2;
public static int TYPE_NOT_CONNECTED = 0;
public static int getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (null != activeNetwork) {
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
return TYPE_WIFI;
if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
return TYPE_MOBILE;
}
return TYPE_NOT_CONNECTED;
}
public static String getConnectivityStatusString(Context context) {
int conn = NetworkUtil.getConnectivityStatus(context);
String status = null;
if (conn == NetworkUtil.TYPE_WIFI) {
//status = "Wifi enabled";
status="Internet connection available";
} else if (conn == NetworkUtil.TYPE_MOBILE) {
//status = "Mobile data enabled";
status="Internet connection available";
} else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
status = "Not connected to Internet";
}
return status;
}
Run Code Online (Sandbox Code Playgroud)
}
并将其添加到您的androidmanifest文件中
<receiver
android:name=".NetworkChangeReceiver"
android:label="NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
在清单文件中添加Internet权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)
我希望它对您有用,
真奇怪。不管怎样,尝试一下这个有点不同的代码:
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if(activeNetwork != null){
boolean isConnected = activeNetwork.isConnected();
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
if(isConnected && isWiFi){
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17103 次 |
| 最近记录: |