android 指定wifi热点自动连接

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>



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值