首页 > 其他分享 >Android实时监听网络状态

Android实时监听网络状态

时间:2023-09-05 16:32:01浏览次数:38  
标签:javen 实时 监听 public static import Android com android

Android实时监听网络状态(1)

 

其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就可以实现网络的监听。

1、添加访问网络和获取网络状态的权限

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

2、新建一个Application类并继承android.app.Application 申明变量保存网络状态

package com.javen.application;

import com.javen.netbroadcast.NetUtil;


public class Application extends android.app.Application {
    private static Application mApplication;
    public static int mNetWorkState;

    public static synchronized Application getInstance() {
        return mApplication;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mApplication = this;
        initData();
    }



    public void initData() {
        mNetWorkState = NetUtil.getNetworkState(this);
    }
}

 

3、新建NetBroadcastReceiver类继承BroadcastReceiver 并实现onReceive方法 在onReceive方法通知接口完成加载

package com.javen.receiver;

import java.util.ArrayList;

import com.javen.application.Application;
import com.javen.netbroadcast.NetUtil;


import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class NetBroadcastReceiver extends BroadcastReceiver {
    public static ArrayList<netEventHandler> mListeners = new ArrayList<netEventHandler>();
    private static String NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(NET_CHANGE_ACTION)) {
            Application.mNetWorkState = NetUtil.getNetworkState(context);
            if (mListeners.size() > 0)// 通知接口完成加载
                for (netEventHandler handler : mListeners) {
                    handler.onNetChange();
                }
        }
    }

    public static abstract interface netEventHandler {

        public abstract void onNetChange();
    }
}

4、在应该的Activity中实现netEventHandler接口 

package com.javen.netbroadcast;

import com.javen.receiver.NetBroadcastReceiver;
import com.javen.receiver.NetBroadcastReceiver.netEventHandler;
import com.javen.ui.base.BaseActivity;

import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends BaseActivity implements netEventHandler{
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NetBroadcastReceiver.mListeners.add(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onNetChange() {
        // TODO Auto-generated method stub
        if (NetUtil.getNetworkState(this) == NetUtil.NETWORN_NONE) {
            T.showLong(this, R.string.net_err);
        }else {
            T.showLong(this, "网络可以使用");
        }
    }

}

5、判断网络的工具类

package com.javen.netbroadcast;

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

public class NetUtil {
    public static final int NETWORN_NONE = 0;
    public static final int NETWORN_WIFI = 1;
    public static final int NETWORN_MOBILE = 2;

    public static int getNetworkState(Context context) {
        ConnectivityManager connManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        // Wifi
        State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
                .getState();
        if (state == State.CONNECTED || state == State.CONNECTING) {
            return NETWORN_WIFI;
        }

        // 3G
        state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
                .getState();
        if (state == State.CONNECTED || state == State.CONNECTING) {
            return NETWORN_MOBILE;
        }
        return NETWORN_NONE;
    }
}

 

不要让昨天的沮丧 让今天的梦想黯然失色 成功的人总是修改方法而不修改目标 微信公众号:javenlife

 


标签:javen,实时,监听,public,static,import,Android,com,android
From: https://blog.51cto.com/u_5513510/7374022

相关文章

  • Android总结篇系列:Android Service
    Android总结篇系列:AndroidService Service通常总是称之为“后台服务”,其中“后台”一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件:1.并不依赖于用户可视的UI界面(当然,这一条其实也不是绝对的......
  • Android平台GB28181历史视音频文件检索规范探讨及技术实现
    技术背景我们在做Android平台GB28181设备接入侧模块的时候,特别是执法记录仪或类似场景,系统除了对常规的录像有要求,还需要能和GB28181平台侧交互,比如实现设备侧视音频文件检索、下载或回放。本文假定记录仪或相关设备已经完成录像,主要来探讨下设备视音频文件检索相关。规范解读先回......
  • esp32 实时性测试 485 adc
    主循环内测试各个模块的耗时(485/json-parse/ads1115/sht30-dis/)beforesht30:9584aftersht30:9625Temperature:28.52/CHumidity:62.59%beforeadc:9626afteradc:9662hall_sensor_ampere:0.170NTC_Rvalue:10.960looptimeis:9662before485parse9662......
  • Android并发编程高级面试题汇总(含详细解析 十七)
    Android并发编程高级面试题汇总最全最细面试题讲解持续更新中......
  • Android入门教程 | DialogFragment 的使用
    弹窗,是常见的一种提示方式。DialogFragment是在3.0时引入的,是一种特殊的Fragment,用于在Activity上展示一个模态的对话框。DialogFragment示例确定UI样式首先我们得知道做成什么样。一般来说简单的弹窗是一个标题,一端文字内容。或者带有一两个按钮。这里我们做一个有标题和文字......
  • 如果时光倒流,你还会选择做 Android 开发吗?
    最近看到知乎有人提出了这么一个问题引起了不少人的兴趣,我之前也是在6年前学的Android,自己也是深有感触,如果时光倒流我还是会选择做Android开发,很多人只是看到了现在Android的不景气,但是我那个时候开始学编程的时候,Android才是“顶流”。只要你会Android,也不说多好,也不怎么看学历......
  • Android添加菜单栏
    importandroid.view.Menu;importandroid.view.MenuItem;importandroid.widget.Toast;@OverridepublicbooleanonCreateOptionsMenu(Menumenu){MenuInflatermenuInflater=getMenuInflater();menuInflater.inflate(R.menu.main_menu,menu);......
  • 如何让Android平台像网络摄像机一样实现GB28181前端设备接入?
    技术背景好多开发者在做国标对接的时候,首先想到的是IPC(网络摄像头),通过参数化配置,接入到国标平台,实现媒体数据的按需查看等操作。像执法记录仪等智能终端,跑在Android平台,对接GB28181平台的需求也非常大,网上相关demo也不少,但真正设计符合相关协议规范、功能完善、长时间稳定运行的并......
  • 硬核!2023版Android面试指南,涵盖Android所有核心技能
    前言今年能明显感受到各行各业的不景气,互联网行业也是首当其冲。最近,大家反馈面试越来越难了,面试八股文也考察的越来越细,越来越底层,面试机会也肉眼可见的变少。这里,给大家总结一下面试小技巧!面试没准备好,不要随便面试,一些大厂都会有面试评价记录,太多差评影响以后的面试,同时面完之后......
  • Android并发编程高级面试题汇总(含详细解析 十六)
    Android并发编程高级面试题汇总最全最细面试题讲解持续更新中......