Android 對(duì)手機(jī)網(wǎng)絡(luò)的檢測(cè)和監(jiān)聽(tīng)的方法示例
此次分享內(nèi)容

使用BroadcastReceiver廣播接收器來(lái)接收網(wǎng)絡(luò)狀態(tài)(采用系統(tǒng)廣播)
BroadcastReceiver作為Android四大組件之一;
Android:BroadcastReceiver廣播接收器最全面解析
網(wǎng)絡(luò)權(quán)限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/>
自定義廣播接收器
public class NetWorkStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("網(wǎng)絡(luò)狀態(tài)發(fā)生變化");
//檢測(cè)API是不是小于23,因?yàn)榈搅薃PI23之后getNetworkInfo(int networkType)方法被棄用
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {
//獲得ConnectivityManager對(duì)象
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//獲取ConnectivityManager對(duì)象對(duì)應(yīng)的NetworkInfo對(duì)象
//獲取WIFI連接的信息
NetworkInfo wifiNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
//獲取移動(dòng)數(shù)據(jù)連接的信息
NetworkInfo dataNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifiNetworkInfo.isConnected() && dataNetworkInfo.isConnected()) {
Toast.makeText(context, "WIFI已連接,移動(dòng)數(shù)據(jù)已連接", Toast.LENGTH_SHORT).show();
} else if (wifiNetworkInfo.isConnected() && !dataNetworkInfo.isConnected()) {
Toast.makeText(context, "WIFI已連接,移動(dòng)數(shù)據(jù)已斷開(kāi)", Toast.LENGTH_SHORT).show();
} else if (!wifiNetworkInfo.isConnected() && dataNetworkInfo.isConnected()) {
Toast.makeText(context, "WIFI已斷開(kāi),移動(dòng)數(shù)據(jù)已連接", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "WIFI已斷開(kāi),移動(dòng)數(shù)據(jù)已斷開(kāi)", Toast.LENGTH_SHORT).show();
}
//API大于23時(shí)使用下面的方式進(jìn)行網(wǎng)絡(luò)監(jiān)聽(tīng)
}else {
System.out.println("API level 大于23");
//獲得ConnectivityManager對(duì)象
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//獲取所有網(wǎng)絡(luò)連接的信息
Network[] networks = connMgr.getAllNetworks();
//用于存放網(wǎng)絡(luò)連接信息
StringBuilder sb = new StringBuilder();
//通過(guò)循環(huán)將網(wǎng)絡(luò)信息逐個(gè)取出來(lái)
for (int i=0; i < networks.length; i++){
//獲取ConnectivityManager對(duì)象對(duì)應(yīng)的NetworkInfo對(duì)象
NetworkInfo networkInfo = connMgr.getNetworkInfo(networks[i]);
sb.append(networkInfo.getTypeName() + " connect is " + networkInfo.isConnected());
}
Toast.makeText(context, sb.toString(),Toast.LENGTH_SHORT).show();
}
}
}
注冊(cè)廣播
- 動(dòng)態(tài)注冊(cè)
- 靜態(tài)注冊(cè)
動(dòng)態(tài)注冊(cè)
public class MainActivity extends AppCompatActivity {
NetWorkStateReceiver netWorkStateReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//在onResume()方法注冊(cè)
@Override
protected void onResume() {
if (netWorkStateReceiver == null) {
netWorkStateReceiver = new NetWorkStateReceiver();
}
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(netWorkStateReceiver, filter);
System.out.println("注冊(cè)");
super.onResume();
}
//onPause()方法注銷(xiāo)
@Override
protected void onPause() {
unregisterReceiver(netWorkStateReceiver);
System.out.println("注銷(xiāo)");
super.onPause();
}
}
靜態(tài)注冊(cè)
在AndroidManifest.xml進(jìn)行廣播的靜態(tài)注冊(cè)
<receiver android:name=".NetWorkStateReceiver">
<intent-filter>
//檢測(cè)網(wǎng)絡(luò)變化的acton
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
至此,今天分享完畢,這樣就可以實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)狀態(tài)的實(shí)時(shí)監(jiān)聽(tīng)了
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android 7.0 監(jiān)聽(tīng)網(wǎng)絡(luò)變化的示例代碼
- android 監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)的變化及實(shí)戰(zhàn)的示例代碼
- Android 動(dòng)態(tài)注冊(cè)監(jiān)聽(tīng)網(wǎng)絡(luò)變化實(shí)例詳解
- Android 監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)方法詳解
- Android編程監(jiān)聽(tīng)網(wǎng)絡(luò)連接狀態(tài)改變的方法
- Android 實(shí)時(shí)監(jiān)測(cè)(監(jiān)聽(tīng))網(wǎng)絡(luò)連接狀態(tài)變化
- Android 廣播監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)詳解及實(shí)例代碼
- Android網(wǎng)絡(luò)狀態(tài)實(shí)時(shí)監(jiān)聽(tīng)實(shí)例代碼(二)
- Android 網(wǎng)絡(luò)狀態(tài)實(shí)時(shí)監(jiān)聽(tīng)代碼實(shí)例(一)
- Android中監(jiān)聽(tīng)判斷網(wǎng)絡(luò)連接狀態(tài)的方法
相關(guān)文章
Android帶數(shù)字或紅點(diǎn)的底部導(dǎo)航攔和聯(lián)網(wǎng)等待加載動(dòng)畫(huà)示例
這篇文章主要介紹了Android帶數(shù)字或紅點(diǎn)的底部導(dǎo)航攔和聯(lián)網(wǎng)等待加載動(dòng)畫(huà)示例,具有一定的參考價(jià)值,有興趣的同學(xué)可以了解一下。2017-03-03
Android 自定義圓形頭像CircleImageView支持加載網(wǎng)絡(luò)圖片的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 自定義圓形頭像CircleImageView支持加載網(wǎng)絡(luò)圖片的實(shí)現(xiàn)代碼,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10
AndroidStudio構(gòu)建項(xiàng)目提示錯(cuò)誤信息“unable to find valid certification”的
這篇文章主要介紹了AndroidStudio構(gòu)建項(xiàng)目提示“unable to find valid certification”最新解決方案,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Android 表情面板和軟鍵盤(pán)切換時(shí)跳閃問(wèn)題的解決方法
這篇文章主要介紹了Android 表情面板和軟鍵盤(pán)切換時(shí)跳閃問(wèn)題的解決方法,需要的朋友可以參考下2017-08-08
Android Compose實(shí)現(xiàn)聯(lián)系人列表流程
聲明式UI,更簡(jiǎn)單的自定義,實(shí)時(shí)帶交互的預(yù)覽功能Compose并不是類(lèi)似于Recyclerview的高級(jí)控件,而是直接拋棄了View,ViewGroup那套東西,從上到下魯了一套全新的框架,直白點(diǎn)說(shuō)就是它的渲染機(jī)制,布局機(jī)制,觸摸算法,以及UI具體寫(xiě)法全都是新的2023-03-03
Fragment里添加ListView不要用ListFragment
這篇文章主要介紹了Fragment里添加ListView不要用ListFragment,需要的朋友可以參考下2015-07-07
Flutter上的數(shù)據(jù)監(jiān)控深入理解
這篇文章主要給大家介紹了關(guān)于Flutter上的數(shù)據(jù)監(jiān)控的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Android socket實(shí)現(xiàn)原理詳解 服務(wù)端和客戶端如何搭建
這篇文章主要為大家詳細(xì)介紹了Android socket實(shí)現(xiàn)原理詳解,以及服務(wù)端和客戶端的搭建方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
Android自定義控件之三點(diǎn)循環(huán)縮放效果
這篇文章主要為大家詳細(xì)介紹了Android自定義控件之三點(diǎn)循環(huán)縮放效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10

