android利用广播全局监听网络。

 

最近看到一篇博客,对于广播的解释实在是淋漓尽致。

http://www.cnblogs.com/trinea/archive/2012/11/09/2763182.html

从事android工作已经一年,对于广播的认识却非常少,我犯了一个严重的错误,也就是上述链接中提到的。

我一直尝试着取消注册广播,却一直取消不掉。

原因是我在配置文件中,和java代码中,都注册了。

通过registerReceiver注册的BroadcastReceiver在对其进行注册的Context对象"销毁"了或者调用了unregisterReceiver方法时也就失效了,而通过<receiver>标签注册的BroadcastReceiver只要应用程序没有被删除就一直有效。

 

 

接着说标题的内容:

点我下载Demo

先在配置文件中注明权限:

 

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

 

 

接着写广播接收者内容:

package com.example.networkdemo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.os.Parcelable;
import android.util.Log;

public class NetBroadCastReciver extends BroadcastReceiver {

	/**
	 * 只有当网络改变的时候才会 经过广播。
	 */
	
	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		//判断wifi是打开还是关闭
		if(WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())){ //此处无实际作用,只是看开关是否开启
			int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
			switch (wifiState) {
			case WifiManager.WIFI_STATE_DISABLED:
				break;

			case WifiManager.WIFI_STATE_DISABLING:
				break;
			}
		}
		//此处是主要代码,
		//如果是在开启wifi连接和有网络状态下
		if(ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())){
			ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
			NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
			if(NetworkInfo.State.CONNECTED==info.getState()){
				//连接状态
				Log.e("pzf", "有网络连接");
				//执行后续代码
				//new AutoRegisterAndLogin().execute((String)null);
				//ps:由于boradCastReciver触发器组件,他和Service服务一样,都是在主线程的,所以,如果你的后续操作是耗时的操作,请new Thread获得AsyncTask等,进行异步操作
			}else{
				Log.e("pzf", "无网络连接");
			}
		}
		
		
		
		
	}

}


接着别忘了注册广播,我这里写的是全局的注册

 

 <receiver 
            android:name=".NetBroadCastReciver"
            >
             <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
                <action android:name="android.net.wifi.STATE_CHANGE" />
            </intent-filter>
            
        </receiver>

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值