实时监测网络状态

实时监测网络状态

原理:当手机网络状态发生变化时,系统会发出广播。我们可以监听这个广播,当网络状态发生变化时,判断网络状态,再利用接口将网络状态回调出去。

一、添加权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

二、判断网络状态的工具类

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetUtil {

    /**
     * 没有连接网络
     */
    private static final int NETWORK_NONE = -1;
    /**
     * 移动网络
     */
    private static final int NETWORK_MOBILE = 0;
    /**
     * 无线网络
     */
    private static final int NETWORK_WIFI = 1;


    public static int getNetWorkState(Context context) {

    ConnectivityManager connectivityManager = (ConnectivityManager) context
        .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo networkInfo = connectivityManager
        .getActiveNetworkInfo();

    if(networkInfo != null && networkInfo.isConnected()){
        if(networkInfo.getType() == ConnectivityManager.TYPE_WIFI){
        return NETWORK_WIFI;
        }else if(networkInfo.getType() == ConnectivityManager.TYPE_MOBILE){
        return NETWORK_MOBILE;
        }
    }
    return NETWORK_NONE;
    }
}

三、定义回调接口

public interface INextStatusChange {

    /**
     * 网络状态发生改变
     * @param netStatus
     */
    void onNetStatusChange(int netStatus);
}

四、实现接口

public class MyApplication extends Application implements INextStatusChange{

    public static Context mContext;

    public static INextStatusChange iNextStatusChange;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = getApplicationContext();
        iNextStatusChange = this;
    }

    @Override
    public void onNetStatusChange(int netStatus) {
    switch (netStatus){
        case -1:
            Toast.makeText(mContext,"无网络连接",Toast.LENGTH_SHORT).show();
            break;
        case 0:
            Toast.makeText(mContext,"当前网络状态:移动网络",Toast.LENGTH_SHORT).show();
            break;
        case 1:
            Toast.makeText(mContext,"当前网络状态:无线网络",Toast.LENGTH_SHORT).show();
            break;
        default:

            break;
        }
    }
}

五、定义BroadcastReceiver

public class NetBroadcastReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

    // 如果相等的话就说明网络状态发生了变化
    if(intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)){
        MyApplication.iNextStatusChange.onNetStatusChange(NetUtil.getNetWorkState(context));
        }
    }
}

六、注册广播

<receiver android:name=".net.NetBroadcastReceiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
</receiver>

备注:这里只是简单实现,具体逻辑需要根据需求自行修改。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值