直接在BaseActivity中引下面代码:
private ConnectivityManager.NetworkCallback networkCallback;private ConnectivityManager connectivityManager;//网络监听networkCallback = new NetworkCallbackImpl();NetworkRequest.Builder builder = new NetworkRequest.Builder();NetworkRequest request = builder.build();connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);connectivityManager.registerNetworkCallback(request,networkCallback);private class NetworkCallbackImpl extends ConnectivityManager.NetworkCallback { /** * 网络可用的回调连接成功 */ @OverrIDe public voID onAvailable(Network network) { super.onAvailable(network); mHandler.post(new Runnable() { @OverrIDe public voID run() { if (mNetErrorVIEw != null) { mNetErrorVIEw.setVisibility(VIEw.GONE); } } }); } /** * 实践中在网络连接正常的情况下,丢失数据会有回调 */ @OverrIDe public voID onLosing(Network network,int maxmsTolive) { super.onLosing(network,maxmsTolive); } /** * 网络不可用时调用和onAvailable成对出现 */ @OverrIDe public voID onLost(Network network) { super.onLost(network); mHandler.post(new Runnable() { @OverrIDe public voID run() { if (mNetErrorVIEw != null) { mNetErrorVIEw.setVisibility(VIEw.VISIBLE); } } }); } }
mNetErrorVIEw 是无网络时显示的一个vIEw,写一个这个vIEw的布局net_status_bar.xml
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:ID="@+ID/net_status_bar_top" androID:layout_wIDth="match_parent" androID:layout_height="@dimen/net_height" androID:background="@drawable/net_warning_bar_bg" androID:clickable="true" androID:gravity="center_vertical" androID:paddingleft="@dimen/padding_normal" androID:visibility="gone" > <TextVIEw androID:ID="@+ID/net_status_bar_info_top" androID:layout_wIDth="0.0dip" androID:layout_height="match_parent" androID:layout_gravity="center_vertical" androID:layout_marginRight="@dimen/margin_normal" androID:layout_weight="1.0" androID:drawableleft="@drawable/net_warning" androID:drawablepadding="@dimen/padding_normal" androID:gravity="center_vertical" androID:text="@string/net_state_info" androID:textcolor="@color/black" androID:textSize="@dimen/Font_size_normal" /> <ImageVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_marginRight="@dimen/margin_normal" androID:contentDescription="@string/app_name" androID:src="@drawable/net_warning_redirect" androID:visibility="gone" /></linearLayout>
再在需要用到网络监听的Activity中继承BaseActivity,再在当前Activity中
mNetErrorVIEw = findVIEwByID(R.ID.net_status_bar_top);
最后在当前Activity的布局中适当的位置引入这个布局文件即可
<include layout="@layout/net_status_bar" />
到此就完成了实时网络监听
如果需要已进入就监听到网络,需要在BaseActivity的onResume中监听
if (!NetUtil.isNetConnected(this)) { if (mNetErrorVIEw != null) { mNetErrorVIEw.setVisibility(VIEw.VISIBLE); } } else { if (mNetErrorVIEw != null) { mNetErrorVIEw.setVisibility(VIEw.GONE); } }
监听代码
public static boolean isNetConnected(Context context) { boolean isNetConnected; // 获得网络连接服务 ConnectivityManager connManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = connManager.getActiveNetworkInfo(); if (info != null && info.isAvailable()) {// String name = info.getTypename(); isNetConnected = true; } else { isNetConnected = false; } return isNetConnected; }
再在onDestroy中取消注册
connectivityManager.unregisterNetworkCallback(networkCallback);
上面代码中所需要的一些尺寸,图片等可以自行先随意设置,先看效果,后期可换成项目所需的对应资源
最近自己写了一个小程序,大家可以关注一下,附带源码:
搬砖之余看个电影放松,扫码关注,最新,最全的各种影视资源,省去各种VIP,直接观看,你值得拥有
总结
以上是内存溢出为你收集整理的Android-网络监听全部内容,希望文章能够帮你解决Android-网络监听所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)