android 监听wifi和数据连接

我们项目现在改登录流程,是在wifi或者数据连接开启并且连接到网络的时候,来后台自动注册和登录账户。这样好像可以增加用户数。

我的实现,是通过广播BroadCastReciver触发器组件来实现,在项目中,为了全局性,实在服务中注册的,测出的demo只是在应用中的,原理都一样,只是注册的地方不同而已。


代码如下:

package com.example.netlistener;

import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.IntentFilter;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		BroadcastReceiver receiver=new NetBroadCastReciver();
		
		//注册BroadCastReciver,设置监听的频道。就是filter中的
		IntentFilter filter=new IntentFilter();
		filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
		filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
		filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
		registerReceiver(receiver, filter);
		
	}

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

}

package com.example.netlistener;

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", "无网络连接");
			}
		}
		
		
		
		
	}

}

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.netlistener"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <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"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.netlistener.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <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>
    </application>

</manifest>


源码地址:

http://download.csdn.net/detail/pangzaifei/6938315


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。