最近給自己擼的APP添加網絡的監聽,具體實現如下:
我們利用廣播接收器來實現
23以後manager.getNetworkInfo(Type類型)方法不能用了,所以要區分
public class NetWorkStateReceiever extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.e("NetWork", "onReceive: "+intent.getAction() );
//android.net.conn.CONNECTIVITY_CHANGE
//sdk 23以下的情況
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiNet = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobileNet = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifiNet.isConnected()){
Toast.makeText(context, "wifi已連接", Toast.LENGTH_SHORT).show();
}else if (!wifiNet.isConnected() && mobileNet.isConnected()){
Toast.makeText(context, "已切換至運營商網絡,請注意網絡消耗", Toast.LENGTH_SHORT).show();
}else if (!wifiNet.isConnected() && !mobileNet.isConnected()){
Toast.makeText(context, "當前無網絡,請打開網絡開關", Toast.LENGTH_SHORT).show();
}
}else {
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
Network[] allNetworks = manager.getAllNetworks();
for (int i = 0; i < allNetworks.length; i++) {
//獲取ConnectivityManager對象對應的NetworkInfo對象
NetworkInfo networkInfo = manager.getNetworkInfo(allNetworks[i]);
if (networkInfo.getTypeName().equals("WIFI") && networkInfo.isConnected()){
Toast.makeText(context, "Wifi已連接", Toast.LENGTH_SHORT).show();
return;
}else {
Toast.makeText(context, "Wifi未連接", Toast.LENGTH_SHORT).show();
}
}
}
}
}
然後靜態註冊:注意添加action,android.net.conn.CONNECTIVITY_CHANGE
<receiver android:name=".service.NetWorkStateReceiever">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>