您好,登錄后才能下訂單哦!
如何在Android中使用實時監聽BroadcastReceiver網絡狀態?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
BroadcastReceiver的注冊方式:
(1)動態注冊:即在代碼中使用registerReceiver()方法進行注冊,動態注冊需要在onPause或onDestory方法中反注冊,不然會出現泄露。
(2)靜態注冊:在清單文件的application節點下通過<receiver>標簽聲明,系統首次啟動時會自動注冊。
效果圖:
1.定義網絡狀態監聽接口及方法
/** * 網絡狀態類型改變的監聽接口 */ public interface NetStatusMonitor { void onNetChange(boolean netStatus); } /** * 設置網絡狀態監聽接口 */ public void setStatusMonitor(NetStatusMonitor netStatusMonitor) { this.netStatusMonitor = netStatusMonitor; }
2.網絡狀態工具類
/** * Created by ruancw on 2018/5/27. * 網絡狀態工具類 */ public class NetUtil { //網絡未連接 private static final boolean NETWORK_NONE = false; //移動數據或無線網絡連接 private static final boolean NETWORK_AVAILABLE = true; /** * 獲取當前網絡狀態 * @param context 上下文對象 * @return boolean */ public static boolean getNetStatus(Context context) { // 獲取系統連接管理器對象 ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); //獲取網絡狀態信息 NetworkInfo activeNetworkInfo = connectivityManager != null ? connectivityManager .getActiveNetworkInfo() : null; //判斷網絡NetworkInfo是否不為空且連接 if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { //網絡連接可用 return NETWORK_AVAILABLE; } else { return NETWORK_NONE;//網絡不可用(未連接) } } }
3.定義NetBroadcastReceiver
NetBroadcastReceiver繼承自BroadcastReceiver,并重寫onReceive方法
/** * Created by ruancw on 2018/5/27. * 用于實時監聽app的網絡狀態 */ public class NetBroadcastReceiver extends BroadcastReceiver { //網絡狀態監聽接口 private NetStatusMonitor netStatusMonitor; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) { //獲取網絡狀態的類型 boolean netStatus = NetUtil.getNetStatus(context); if (netStatusMonitor != null) // 接口傳遞網絡狀態的類型到注冊廣播的頁面 netStatusMonitor.onNetChange(netStatus); } } /** * 網絡狀態類型改變的監聽接口 */ public interface NetStatusMonitor { void onNetChange(boolean netStatus); } /** * 設置網絡狀態監聽接口 */ public void setStatusMonitor(NetStatusMonitor netStatusMonitor) { this.netStatusMonitor = netStatusMonitor; } }
4.BaseActivity中注冊
(1)BaseActivity實現網絡狀態監聽接口
(2)onResume中注冊廣播
@Override protected void onResume() { super.onResume(); //注冊網絡狀態監聽的廣播 registerBroadcastReceiver(); }
/** * 注冊網絡狀態廣播 */ private void registerBroadcastReceiver() { //注冊廣播 if (netBroadcastReceiver == null) { netBroadcastReceiver = new NetBroadcastReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(netBroadcastReceiver, filter); //設置監聽 netBroadcastReceiver.setStatusMonitor(this); } }
(3)onPause或onDestory中取消注冊
@Override protected void onDestroy() { super.onDestroy(); if (netBroadcastReceiver != null) { //注銷廣播 unregisterReceiver(netBroadcastReceiver); } }
(4)重寫網絡監聽接口方法
@Override public void onNetChange(boolean netStatus) { this.netStatus = netStatus; isNetConnect(); }
/** * 監聽網絡狀態做出相應改變 */ private void isNetConnect() { Message message=new Message(); if (netStatus){ message.what=99; handler.sendMessage(message); }else { UIUtil.toast("當前網絡不可用"); message.what=100; handler.sendMessage(message); } }
(5)主線程修改UI
@SuppressLint("HandlerLeak") Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what==100){ tvNet.setVisibility(View.VISIBLE); }else { tvNet.setVisibility(View.GONE); } } };
Android是一種基于Linux內核的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由美國Google公司和開放手機聯盟領導及開發。
看完上述內容,你們掌握如何在Android中使用實時監聽BroadcastReceiver網絡狀態的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。