Activity内容如下:
package com.shineEye.www;
import java.util.List;
import android.Manifest.permission;
import android.app.Activity;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
* @Class Name : WifiAutoConnection.java
* @Description WIFI自动连接测试类
* @Author YuanLiangFeng 袁良锋 lufengdie@126.com
* @Date 2013-4-18 - 上午12:09:44
*/
public class WifiAutoConnection extends Activity implements OnClickListener{
private final String TAG = getClass().getSimpleName();
/** 指定热点SSID **/
private final String wifiSSID = "\"TP-LINK_585034\"";
/** 指定热点名称 **/
private final String wifiName = "TP-LINK_585034";
/** WIFI管理器 **/
private WifiManager wifiManager = null;
/** WIFI状态监听广播 **/
private BroadcastReceiver receiver;
/** 指定热点网络ID **/
private int networkId;
/** 指定热点是否已连接 **/
private boolean targetWifiEnable = false;
/** 打开按钮 **/
private Button openLight;
/** 关闭按钮 **/
private Button closeLight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initUI();
}
private void initUI(){
openLight = (Button) findViewById(R.id.openLight);
closeLight = (Button) findViewById(R.id.closeLight);
openLight.setOnClickListener(this);
closeLight.setOnClickListener(this);
}
@Override
protected void onResume() {
super.onResume();
initWifiConnection();
}
private void initWifiConnection(){
wifiManager = (WifiManager) getSystemService(Service.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiSSID.equals(wifiInfo.getSSID()) ) {
targetWifiEnable = true;
return;
}
if (targetWifiIsConfig()) {
if (!wifiManager.isWifiEnabled()) {
if (wifiManager.setWifiEnabled(true)) {
registerWifiChangeBoradCast();
}else{
showLongToast("wifi开启失败,请手动打开!");
Log.d(TAG, "WIFI开启失败");
}
}else{
if (targetWifiCanScan()) {
connectionTargetWifi();
}
}
}
}
/**
* Description 指定WIFI是否可以被扫描到,即是否在可用范围内
* @return true表示可用,否则不可用
*/
private boolean targetWifiCanScan(){
List<ScanResult> scanResultList = wifiManager.getScanResults();
if (scanResultList != null && scanResultList.size() > 0) {
for (int i = 0; i < scanResultList.size(); i++) {
ScanResult scanResult = scanResultList.get(i);
StringBuffer str = new StringBuffer()
.append("SSID: " + scanResult.SSID).append("\n")
.append("BSSID: " + scanResult.BSSID).append("\n")
.append("capabilities: " + scanResult.capabilities).append("\n")
.append("level: " + scanResult.level).append("\n")
.append("frequency: " + scanResult.frequency);
Log.i(TAG, str.toString());
if (scanResult.SSID.equals(wifiName)) {
return true;
}
}
}
showLongToast("指定wifi热点暂不可用,稍后可能无法操作照明设备!");
return false;
}
/**
* Description 指定热点是否已配置(注册)
* @return true表示已注册,否则未注册
*/
private boolean targetWifiIsConfig(){
List<WifiConfiguration> wifiConfigurationList = wifiManager.getConfiguredNetworks();
for (int i = 0; i < wifiConfigurationList.size(); i++) {
WifiConfiguration wifiConfiguration = wifiConfigurationList.get(i);
// StringBuffer str = new StringBuffer()
// .append("SSID: " + wifiConfiguration.SSID).append("\n")
// .append("status: " + wifiConfiguration.status).append("\n")
// .append("networkId: " + wifiConfiguration.networkId).append("\n")
// .append("priority: " + wifiConfiguration.priority).append("\n")
// .append("wepTxKeyIndex: " + wifiConfiguration.wepTxKeyIndex);
// Log.i(TAG, str);
if (wifiConfiguration.SSID.equals(wifiSSID)) {
networkId = wifiConfiguration.networkId;
return true;
}
}
showLongToast("指定wifi热点未注册,请在wifi管理中先注册!");
return false;
}
/**
* Description 连接指定热点
* @return
*/
private boolean connectionTargetWifi(){
if (wifiManager.enableNetwork(networkId, true)) {
targetWifiEnable = true;
Log.i(TAG, "热点连接成功");
return true;
}else{
showLongToast("指定wifi热点连接失败,请手动连接!");
Log.d(TAG, "热点连接失败");
return false;
}
}
/**
* Description 注册WIFI状态改变监听广播
*/
private void registerWifiChangeBoradCast(){
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// WIFI可用时连接到指定热点
System.out.println(wifiManager.getWifiState());
if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
Log.i(TAG, "WIFI成功开启");
unregisterWifiChangeReceiver();
handler.sendEmptyMessageDelayed(0, 10 * 1000);
}
}
};
IntentFilter filter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
String broadcastPermission = permission.ACCESS_WIFI_STATE;
registerReceiver(receiver, filter, broadcastPermission, new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
});
}
/**
* Description 注销WIFI状态改变监听广播
*/
private void unregisterWifiChangeReceiver(){
if (receiver != null) {
unregisterReceiver(receiver);
}
}
/**
* Description 显示短时长显示的Toast
* @param text
*/
@SuppressWarnings("unused")
private void showShortToast(String text){
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
/**
* Description 显示久时长显示的Toast
* @param text
*/
private void showLongToast(String text){
if (text != null && !"".equals(text)) {
Toast.makeText(this, text, Toast.LENGTH_LONG).show();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.openLight:
if (targetWifiEnable) {
showLongToast(HttpHelper.sendCommandToServer("A1"));
}else{
initWifiConnection();
}
break;
case R.id.closeLight:
if (targetWifiEnable) {
showLongToast(HttpHelper.sendCommandToServer("B1"));
}else{
initWifiConnection();
}
break;
default:
break;
}
}
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
if (targetWifiCanScan()) {
connectionTargetWifi();
}
}
};
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:padding="20dp">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下面两个按钮可以控制序号为1的设备,指令分别为A1和B1.">
</TextView>
<Button android:id="@+id/openLight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="打开设备">
</Button>
<Button android:id="@+id/closeLight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="关闭设备">
</Button>
</LinearLayout>
mainfest配置文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.shineEye.www"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:description="@string/appDescription">
<activity
android:name=".WifiAutoConnection"
android:label="@string/app_name"
android:theme="@android:style/Theme.Light.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>