1. 程式人生 > >android4.4自己動手連線wifi熱點以及建立wifi熱點

android4.4自己動手連線wifi熱點以及建立wifi熱點

package com.kaka.connector;

import java.util.List;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.net.wifi.ScanResult;

import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.util.Log;

public class ConnectActivity extends Activity {
private List<ScanResult> wifiList; 
private WifiManager wifiManager;
private List<String> passableHotsPot;
private WifiReceiver wifiReceiver; 
private boolean isConnected=false; 
private Button connect;
final private String TAG = "XINGSHI";


/* 監聽熱點變化 */
private final class WifiReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) {
        Log.e(TAG, "onReceive..........\n");
        wifiList = wifiManager.getScanResults(); 
        if (wifiList == null || wifiList.size() == 0 || isConnected) return; 
        onReceiveNewNetworks(wifiList); 
    } 
}

@Override 
public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);

        wifiReceiver = new WifiReceiver(); 
        IntentFilter filter = new IntentFilter();
        filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        registerReceiver(wifiReceiver, filter);

        init(); 
}


/* 初始化引數 */ 
public void init() { 
    Log.e(TAG, "init..........\n");
    setContentView(R.layout.activity_connect);
    connect=(Button)findViewById(R.id.connect); 
    wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

     wifiManager.setWifiEnabled(true);

    //通過按鈕事件搜尋熱點 
    connect.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
        wifiManager.startScan(); 
    } 
    }); 
}


/*當搜尋到新的wifi熱點時判斷該熱點是否符合規格*/ 
public void onReceiveNewNetworks(List<ScanResult> wifiList){ 
    Log.e(TAG, "onReceiveNewNetwork..........\n");
    passableHotsPot=new ArrayList<String>();
    for(ScanResult result:wifiList){ 
    Log.e(TAG, "" + result.SSID); 
    if((result.SSID).contains("vinci"))
        passableHotsPot.add(result.SSID); 
} synchronized (this) { 
    connectToHotpot();
}



    /*連線到熱點*/
public void connectToHotpot(){
    Log.e(TAG, "connectToHotpot..........\n");
    if(passableHotsPot==null || passableHotsPot.size()==0) return;
    WifiConfiguration wifiConfig=this.setWifiParams(passableHotsPot.get(0));
    int wcgID = wifiManager.addNetwork(wifiConfig);
    boolean flag=wifiManager.enableNetwork(wcgID, true);
    isConnected=flag; 
    Log.e(TAG, "connect success? "+flag); 
}


/*設定要連線的熱點的引數*/ 
public WifiConfiguration setWifiParams(String ssid){ 
    WifiConfiguration apConfig=new WifiConfiguration();
    apConfig.SSID="\""+ssid+"\""; 
    apConfig.preSharedKey="\"inspero2014\"";
    apConfig.hiddenSSID = true;
    apConfig.status = WifiConfiguration.Status.ENABLED;
    apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
    apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
    apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
    apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
    apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
    apConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 

    return apConfig;
}


@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    /*銷燬時登出廣播*/
    unregisterReceiver(wifiReceiver);