android实现监听网络状态变化。

实现的功能如下:如果没有网络连接的情况下,就会弹出一个TextView来显示,网络连接不可用。然后再有网的情况下,会隐藏这个TextView。

项目源码 : GitHub地址

二。实现代码。

 项目路径


1.NetUtil.java

package com.syzc.network;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.util.Log;/** * Created by cheng on 2016/11/28. */public class NetUtil {         /**     * 没有连接网络     */    public static final int NETWORK_NONE = -1;    /**     * 移动网络     */    public static final int NETWORK_MOBILE = 0;    /**     * 无线网络     */    public static final int NETWORK_WIFI = 1;    public static int getNetWorkState(Context context) {             // 得到连接管理器对象        ConnectivityManager connectivityManager = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);        NetworkInfo activeNetworkInfo = connectivityManager                .getActiveNetworkInfo();        if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {                 if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) {                     return NETWORK_WIFI;            } else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {                     return NETWORK_MOBILE;            }        } else {                 return NETWORK_NONE;        }        return NETWORK_NONE;    }}

2.NetBroadcastReceiver.java

package com.syzc.network;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManager;import android.util.Log;/** * Created by cheng on 2016/11/28. */public class NetBroadcastReceiver extends BroadcastReceiver {         public NetEvevt evevt = BaseActivity.evevt;    @Override    public void onReceive(Context context, Intent intent) {             if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {                 int netWorkState = NetUtil.getNetWorkState(context);            // 接口回调传过去状态的类型            evevt.onNetChange(netWorkState);        }    }    // 自定义接口    public interface NetEvevt {             public void onNetChange(int netMobile);    }}

3.这里我用了一个BaseActivity.(自己新建一个avtivity,布局文件不用管他)
BaseActivity.java

package com.syzc.network;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;public class BaseActivity extends AppCompatActivity implements NetBroadcastReceiver.NetEvevt {         public static NetBroadcastReceiver.NetEvevt evevt;    /**     * 网络类型     */    private int netMobile;    @Override    protected void onCreate(Bundle savedInstanceState) {             super.onCreate(savedInstanceState);       // setContentView(R.layout.activity_base);        evevt = this;        inspectNet();    }    /**     * 初始化时判断有没有网络     */    public boolean inspectNet() {             this.netMobile = NetUtil.getNetWorkState(BaseActivity.this);        return isNetConnect();        // if (netMobile == NetUtil.NETWORK_WIFI) {             // System.out.println("inspectNet:连接wifi");        // } else if (netMobile == NetUtil.NETWORK_MOBILE) {             // System.out.println("inspectNet:连接移动数据");        // } else if (netMobile == NetUtil.NETWORK_NONE) {             // System.out.println("inspectNet:当前没有网络");        //        // }    }    /**     * 网络变化之后的类型     */    @Override    public void onNetChange(int netMobile) {             // TODO Auto-generated method stub        this.netMobile = netMobile;        isNetConnect();    }    /**     * 判断有无网络 。     *     * @return true 有网, false 没有网络.     */    public boolean isNetConnect() {             if (netMobile == NetUtil.NETWORK_WIFI) {                 return true;        } else if (netMobile == NetUtil.NETWORK_MOBILE) {                 return true;        } else if (netMobile == NetUtil.NETWORK_NONE) {                 return false;        }        return false;    }}

4.再AndroidManifest.xml中注册。
(1).添加权限

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        (2).注册广播(路径改成自己的即可)
   <receiver android:name="com.syzc.network.NetBroadcastReceiver" >            <intent-filter>                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />            </intent-filter>        </receiver>

5.最后就是MainActivity.java。

package com.syzc.network;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.TextView;public class MainActivity extends BaseActivity {         private TextView mTv;    @Override    protected void onCreate(Bundle savedInstanceState) {             super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mTv= (TextView) findViewById(R.id.textView);        //启动时判断网络状态        boolean netConnect = this.isNetConnect();        if (netConnect){                 mTv.setVisibility(View.GONE);        }else {                 mTv.setVisibility(View.VISIBLE);        }    }    @Override    public void onNetChange(int netMobile) {             super.onNetChange(netMobile);        //网络状态变化时的操作        if (netMobile==NetUtil.NETWORK_NONE){                 mTv.setVisibility(View.VISIBLE);        }else {                 mTv.setVisibility(View.GONE);        }    }}

布局文件 activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context=".MainActivity">    <TextView        android:id="@+id/textView"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="#FDEEDE"        android:padding="10dp"        android:text="当前网络不可用!"        android:visibility="gone" /></LinearLayout>

这样应该成功了,一次调试没成功的话,仔细看看哪里错了,耐心点总能解决办法!

更多相关文章

  1. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  2. Android跟蓝牙耳机建立连接有两种方式
  3. 解决 android 4.2 连接 leap wifi 网络
  4. Android(安卓)ListView 获取网络上的数据,动态地进行数据更新!
  5. Android用户界面开发(21):状态栏提示
  6. 之View state changes(视图状态改变)
  7. Android通过发送Intent播放本地视频和网络视频
  8. 12、android socket使用demo:网络聊天
  9. GreenDao主键自增踩的坑

随机推荐

  1. Android开发中 ListView 不能不说的几个
  2. TextView 控件使用
  3. Android――全屏显示的两种方式
  4. Android studio中相对布局组件排列方式
  5. Activity的四种启动模式和onNewIntent()
  6. Android中设置动画循环旋转的方法
  7. Android 中文API (33) ―― Checkable
  8. EditText高度的改变
  9. Mono For Android 之 配置环境
  10. Android NDK 学习之传递类对象