Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 監聽wifi和數據連接

android 監聽wifi和數據連接

編輯:關於Android編程

我們項目現在改登錄流程,是在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", "無網絡連接");
			}
		}
		
		
		
		
	}

}




    
    
    
    

    
        
            
                

                
            
        
        
             
                
                
                
            
            
            
        
    


源碼地址:

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


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved