最近又在從新看《第一行代碼》這本書,在第五章中有一個樣例,能夠檢測當前網絡狀態,可是隻能判斷當前網絡是否可用,在此之上我想是否能作出一個和咱們平常使用的APP同樣判斷當前網絡是wifi仍是移動網絡的樣例出來,因而便有了這篇博文的誕生,一樣這也是我第一次寫博文,但願可以給須要的人帶來一些啓發。java
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
這裏咱們加入的這個權限並不是<uses-permission android:name="android.permission.INTERNET" />
由於咱們只須要應用去獲取當前網絡狀態,而不須要去經過應用去上網,因此只加入上述一個權限便可。class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "網絡狀態改變", Toast.LENGTH_SHORT).show();
}
}
複製代碼
因爲代碼比較少,直接在MainActivity裏寫一個內部類,讓它繼承自BroadcastReceiver,命名爲NetworkChangeReceive,並重寫onReceive方法,當檢測到網絡狀態變化時彈出一個Toast。android
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
複製代碼
在全局變量中增長兩個變量。網絡
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, intentFilter);
}
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
複製代碼
在onCreate方法裏對networkChangeReceiver進行註冊而且在onDestroy方法裏進行註銷。ide
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
Toast.makeText(context, "當前網絡可用", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "當前網絡不可用", Toast.LENGTH_SHORT).show();
}
}
複製代碼
在onReceive()方法中,首先經過getSystemService()方法獲得了ConnectivityManager的實例,這是一個系統服務類,專門用於管理網絡鏈接的。而後調用它的getActiveNetworkInfo()方法能夠獲得NetworkInfo的實例,接着調用NetworkInfo的isAvailable()方法就能夠判斷出當前是否有網絡了。spa
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
switch (networkInfo.getType()) {
case TYPE_MOBILE:
Toast.makeText(context, "正在使用2G/3G/4G網絡", Toast.LENGTH_SHORT).show();
break;
case TYPE_WIFI:
Toast.makeText(context, "正在使用wifi上網", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
} else {
Toast.makeText(context, "當前無網絡鏈接", Toast.LENGTH_SHORT).show();
}
}
}
}
複製代碼