zoukankan      html  css  js  c++  java
  • Android实时监听网络状态

    在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒。一般可以通过ConnectivityManager来完成该工作。

    ConnectivityManager有四个主要任务:

    1、监听手机网络状态(包括GPRS,WIFI, UMTS等)

    2、手机状态发生改变时,发送广播

    3、当一个网络连接失败时进行故障切换

    4、为应用程序提供可以获取可用网络的高精度和粗糙的状态

    当我们要在程序中监听网络状态时,只要一下几个步骤即可:

     1、处理Recevier接口

    package com.gense.ips.main.receiver;
    
    import java.util.Map;
    
    /**
     * 
     * 广播接收器处理接口
     * 
     * @author  J.Wang
     * @version  [版本号, 2015年4月29日]
     * @see  [相关类/方法]
     * @since  [产品/模块版本]
     */
    public interface ReceiverHandler
    {
        public void handlerReceiver(int receiverType,Map<String,Object> param );
    }

    2、定义一个Receiver重载其中的onReceive函数,在其中完成所需要的功能,如根据WIFI和GPRS是否断开来改变空间的外观或者提示是否能访问网络

    package com.gense.ips.main.receiver;
    
     
    
    import java.util.HashMap;
    import java.util.Map;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    
    /**
     * @author J.Wang
     * 
     */
    public class ConnectionChangeReceiver extends BroadcastReceiver {
        
        public static String NET_CONENCT_STATUS = "net_conenct_status";
        
        public static int RECEIVER_TYPE = 100010;
        
        //广播接收处理器
        private ReceiverHandler receiverHandler;
        
        public ConnectionChangeReceiver(ReceiverHandler receiverHandler)
        {
            this.receiverHandler = receiverHandler;
        }
        
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager=(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo  mobNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            NetworkInfo  wifiNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            
            Map<String ,Object> params = new HashMap<String ,Object>();
            
            if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
                //改变背景或者 处理网络的全局变量
                params.put(NET_CONENCT_STATUS, "false");
            }else {
                //改变背景或者 处理网络的全局变量
                params.put(NET_CONENCT_STATUS, "true");
            }
            
            this.receiverHandler.handlerReceiver(RECEIVER_TYPE,params);
        }
    }

    3、注册Receiver,可以在程序中注册,

        /**
         * 注册Receiver
         * @see [类、类#方法、类#成员]
         */
        protected void _registerReceiver(BroadcastReceiver broadcastReceiver)
        {
            IntentFilter filter=new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
            this.registerReceiver(broadcastReceiver, filter);
        }

    4、取消注册Receiver

    /**
    * 取消注册Receiver
    * @param broadcastReceiver
    * @see [类、类#方法、类#成员]
    */
    protected void _unregisterReceiver(BroadcastReceiver broadcastReceiver)
    {
    this.unregisterReceiver(broadcastReceiver);
    }

    5、Receiver程序处理

    /**
         * 处理系统广播事件
         * @param param
         */
        public void handlerReceiver(int receiverType,Map<String, Object> param)
        {
            //处理网络连接通知
            if(receiverType == ConnectionChangeReceiver.RECEIVER_TYPE)
            {
                String isConnect = StringUtils.get(param, ConnectionChangeReceiver.NET_CONENCT_STATUS);
                if("true".equals(isConnect))
                {
                    HttpTask task = new HttpTask(this, Constants.LOGIN_LOAD_PARAMETERS);
                    task.execute();
                }
                else
                {
                    this.showShortMessage("网络未连接");
                }
            }
            
        }
  • 相关阅读:
    h5混合开发好用的下拉刷新插件
    设置窗体可以使用鼠标拖动大小 通过
    C# 使用System.Data.OleDb;避免oracle中文乱码问题
    C# 开启一个新进程并为新进程设置工作目录
    WPF窗体程序入口 自定义窗体启动页面
    WorkFlow WF如何为一个集合赋值
    第三方框架的使用
    AppIcon应用图标 and Launchimage启动图标的制作
    在didSelectRowAtIndexPath 里面取cell的方法
    iOS 开发技术体系
  • 原文地址:https://www.cnblogs.com/wangjuneng/p/4466013.html
Copyright © 2011-2022 走看看