博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Browser学习十四 NetworkStateHandler网络状态监听和处理
阅读量:6691 次
发布时间:2019-06-25

本文共 3311 字,大约阅读时间需要 11 分钟。

hot3.png

其实浏览器的网络监听和处理不过是通知给WebView进行, 没有那么多复杂的操作, 使用了NetworkStateHandler这个类来进行处理

Controller中初始化这个类

 mNetworkHandler = new NetworkStateHandler(mActivity, this); //网络变化监听

/** * Handle network state changes * 处理网络变化 */public class NetworkStateHandler {    Activity mActivity;    Controller mController;    // monitor platform changes    private IntentFilter mNetworkStateChangedFilter;    private BroadcastReceiver mNetworkStateIntentReceiver;    private boolean mIsNetworkUp;    public NetworkStateHandler(Activity activity, Controller controller) {        mActivity = activity;        mController = controller;        // Find out if the network is currently up.        ConnectivityManager cm = (ConnectivityManager) mActivity                .getSystemService(Context.CONNECTIVITY_SERVICE);        NetworkInfo info = cm.getActiveNetworkInfo();        if (info != null) {            mIsNetworkUp = info.isAvailable(); //是否可以连接网络        }        /*         * enables registration for changes in network status from http stack         * 网络变化监听的filter 和receiver         */        mNetworkStateChangedFilter = new IntentFilter();        mNetworkStateChangedFilter.addAction(                ConnectivityManager.CONNECTIVITY_ACTION);        mNetworkStateIntentReceiver = new BroadcastReceiver() {            @Override            public void onReceive(Context context, Intent intent) {                if (intent.getAction().equals(                        ConnectivityManager.CONNECTIVITY_ACTION)) {                    NetworkInfo info = intent.getParcelableExtra(                            ConnectivityManager.EXTRA_NETWORK_INFO);                    String typeName = info.getTypeName(); //获取网络类型是wifi还是mobile                    String subtypeName = info.getSubtypeName();//hspa 之类                    sendNetworkType(typeName.toLowerCase(),                            (subtypeName != null ? subtypeName.toLowerCase() : ""));                    //网络是否连通                    boolean noConnection = intent.getBooleanExtra(                            ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);                                        onNetworkToggle(!noConnection);                }            }        };    }    void onPause() { //在pause中解注册        // unregister network state listener        mActivity.unregisterReceiver(mNetworkStateIntentReceiver);    }    void onResume() {//在resume中注册        mActivity.registerReceiver(mNetworkStateIntentReceiver,                mNetworkStateChangedFilter);    }    /**     * connectivity manager says net has come or gone... inform the user     * @param up true if net has come up, false if net has gone down     */    void onNetworkToggle(boolean up) {        if (up == mIsNetworkUp) {            return;        }        mIsNetworkUp = up;        WebView w = mController.getCurrentWebView();        if (w != null) {            w.setNetworkAvailable(up);//告诉webview 网络是否可以联通        }    }    boolean isNetworkUp() {        return mIsNetworkUp;    }    private void sendNetworkType(String type, String subtype) {        WebView w = mController.getCurrentWebView();        if (w != null) {        	//通知内核当前的网络信息            w.setNetworkType(type, subtype);        }    }}

至此浏览器的分析基本上就结束了, 当然也不是特别全面, 回头看去, 也积累了很多东西, 多看代码, 每天积累一些, 对发展是又好处的.

转载于:https://my.oschina.net/sfshine/blog/313437

你可能感兴趣的文章
学习C# delegate和C# event
查看>>
AD域的唯一ID字段uSNCreated
查看>>
Ubuntu 12.04中文输入法的安装
查看>>
jQuery的.live()和.die()[转]
查看>>
hdu_2002_计算球体积_解题报告
查看>>
连接数据库通过配置文件app.config
查看>>
赛星软件---智能视频分析事件检测
查看>>
【二叉树遍历】中序
查看>>
一个完整的类用来读取OpenSSL生成的pem格式的x509证书
查看>>
Delphi调用WebService(通过SoapHeader认证)经验总结
查看>>
2014年最新世界各国面积排名(172个国家)
查看>>
socket编程演示样例(多线程)
查看>>
C++ 初始化与赋值
查看>>
碰到的异常
查看>>
Android对话框-上篇-之系统对话框
查看>>
利用Segue在视图控制器间传值的问题
查看>>
发动机存隐患 现代起亚宣布在美召回16.8万辆车
查看>>
最前线|VIPKID正寻求4-5亿美元新一轮融资,估值达60亿美元
查看>>
文 OR 理?答案都在这里!
查看>>
XML+JSON面试题都在这里
查看>>