zoukankan      html  css  js  c++  java
  • android 指定wifi热点自动连接

       这两天帮别人做个小玩意,要求由android客户端往指定的wifi路由器上发送指令来控制单片机末端的设备,本来想着在进入客户端后自动连接到指定热点,

    这样自动化的用户体验会好些,结果写好了以后人家说不用,就让用户手动连接吧,应为是小活也不是很在意,不过把这段代码共享下吧或者自己以后用的话也方便。

    Activity内容如下:

      1 package com.shineEye.www;
      2 
      3 import java.util.List;
      4 
      5 import android.Manifest.permission;
      6 import android.app.Activity;
      7 import android.app.Service;
      8 import android.content.BroadcastReceiver;
      9 import android.content.Context;
     10 import android.content.Intent;
     11 import android.content.IntentFilter;
     12 import android.net.wifi.ScanResult;
     13 import android.net.wifi.WifiConfiguration;
     14 import android.net.wifi.WifiInfo;
     15 import android.net.wifi.WifiManager;
     16 import android.os.Bundle;
     17 import android.os.Handler;
     18 import android.os.Message;
     19 import android.util.Log;
     20 import android.view.View;
     21 import android.view.View.OnClickListener;
     22 import android.widget.Button;
     23 import android.widget.Toast;
     24 
     25 /**
     26  * @Class Name : WifiAutoConnection.java
     27  * @Description  WIFI自动连接测试类 
     28  * @Author YuanLiangFeng 袁良锋 lufengdie@126.com
     29  * @Date 2013-4-18 - 上午12:09:44
     30  */
     31 public class WifiAutoConnection extends Activity implements OnClickListener{
     32 
     33     
     34     private final String TAG = getClass().getSimpleName();
     35     /** 指定热点SSID **/
     36     private final String wifiSSID = "\"TP-LINK_585034\"";
     37     /** 指定热点名称 **/
     38     private final String wifiName = "TP-LINK_585034";
     39     /** WIFI管理器 **/
     40     private WifiManager wifiManager = null;
     41     /** WIFI状态监听广播 **/
     42     private BroadcastReceiver receiver;
     43     /** 指定热点网络ID **/
     44     private int networkId;
     45 
     46     /** 指定热点是否已连接  **/
     47     private boolean targetWifiEnable = false;
     48     
     49     /** 打开按钮 **/
     50     private Button openLight;
     51     /** 关闭按钮 **/
     52     private Button closeLight;
     53     
     54     
     55     @Override
     56     protected void onCreate(Bundle savedInstanceState) {
     57         super.onCreate(savedInstanceState);
     58         setContentView(R.layout.main);
     59         initUI();
     60     }
     61     
     62     private void initUI(){
     63         openLight = (Button) findViewById(R.id.openLight);
     64         closeLight = (Button) findViewById(R.id.closeLight);
     65         openLight.setOnClickListener(this);
     66         closeLight.setOnClickListener(this);
     67     }
     68     
     69     
     70     @Override
     71     protected void onResume() {
     72         super.onResume();
     73         initWifiConnection();
     74     }
     75     
     76     private void initWifiConnection(){
     77         wifiManager = (WifiManager) getSystemService(Service.WIFI_SERVICE);
     78         WifiInfo wifiInfo = wifiManager.getConnectionInfo();
     79         if (wifiSSID.equals(wifiInfo.getSSID()) ) {
     80             targetWifiEnable = true;
     81             return;
     82         }
     83         
     84         if (targetWifiIsConfig()) {
     85             if (!wifiManager.isWifiEnabled()) {
     86                 if (wifiManager.setWifiEnabled(true)) {
     87                     registerWifiChangeBoradCast();
     88                 }else{
     89                     showLongToast("wifi开启失败,请手动打开!");
     90                     Log.d(TAG, "WIFI开启失败");
     91                 }
     92             }else{
     93                 if (targetWifiCanScan()) {
     94                     connectionTargetWifi();
     95                 }
     96             }
     97         }
     98     }
     99     
    100     /**
    101      * Description 指定WIFI是否可以被扫描到,即是否在可用范围内
    102      * @return true表示可用,否则不可用
    103      */
    104     private boolean targetWifiCanScan(){
    105         List<ScanResult> scanResultList = wifiManager.getScanResults();
    106         if (scanResultList != null && scanResultList.size() > 0) {
    107             for (int i = 0; i < scanResultList.size(); i++) {
    108                 ScanResult scanResult = scanResultList.get(i);
    109                 
    110             StringBuffer str = new StringBuffer()
    111                                .append("SSID: " + scanResult.SSID).append("\n")
    112                                .append("BSSID: " + scanResult.BSSID).append("\n")
    113                                .append("capabilities: " + scanResult.capabilities).append("\n")
    114                                .append("level: " + scanResult.level).append("\n")
    115                                .append("frequency: " + scanResult.frequency);
    116             Log.i(TAG, str.toString());
    117                 
    118                 if (scanResult.SSID.equals(wifiName)) {
    119                     return true;
    120                 }
    121             }
    122         }
    123         showLongToast("指定wifi热点暂不可用,稍后可能无法操作照明设备!");
    124         return false;
    125     }
    126     
    127     /**
    128      * Description 指定热点是否已配置(注册) 
    129      * @return true表示已注册,否则未注册
    130      */
    131     private boolean targetWifiIsConfig(){
    132         List<WifiConfiguration> wifiConfigurationList = wifiManager.getConfiguredNetworks();
    133         for (int i = 0; i < wifiConfigurationList.size(); i++) {
    134             WifiConfiguration wifiConfiguration = wifiConfigurationList.get(i);
    135             
    136 //            StringBuffer str = new StringBuffer()
    137 //                    .append("SSID: " + wifiConfiguration.SSID).append("\n")
    138 //                    .append("status: " + wifiConfiguration.status).append("\n")
    139 //                    .append("networkId: " + wifiConfiguration.networkId).append("\n")
    140 //                    .append("priority: " + wifiConfiguration.priority).append("\n")
    141 //                    .append("wepTxKeyIndex: " + wifiConfiguration.wepTxKeyIndex);
    142 //            Log.i(TAG, str);
    143             
    144             if (wifiConfiguration.SSID.equals(wifiSSID)) {
    145                 networkId = wifiConfiguration.networkId;
    146                 return true;
    147             }
    148         }
    149         showLongToast("指定wifi热点未注册,请在wifi管理中先注册!");
    150         return false;
    151     }
    152     
    153     /**
    154      * Description 连接指定热点 
    155      * @return
    156      */
    157     private boolean connectionTargetWifi(){
    158         if (wifiManager.enableNetwork(networkId, true)) {
    159             targetWifiEnable = true;
    160             Log.i(TAG, "热点连接成功");
    161             return true;
    162         }else{
    163             showLongToast("指定wifi热点连接失败,请手动连接!");
    164             Log.d(TAG, "热点连接失败");
    165             return false;
    166         }
    167     }
    168     
    169     /**
    170      * Description 注册WIFI状态改变监听广播
    171      */
    172     private void registerWifiChangeBoradCast(){
    173         receiver = new BroadcastReceiver() {
    174             
    175             @Override
    176             public void onReceive(Context context, Intent intent) {
    177                 // WIFI可用时连接到指定热点
    178                 System.out.println(wifiManager.getWifiState());
    179                 if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
    180                     Log.i(TAG, "WIFI成功开启");
    181                     unregisterWifiChangeReceiver();
    182                     handler.sendEmptyMessageDelayed(0, 10 * 1000);
    183                 }
    184             }
    185         };
    186         
    187         IntentFilter filter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
    188         String broadcastPermission = permission.ACCESS_WIFI_STATE;
    189         registerReceiver(receiver, filter, broadcastPermission, new Handler(){
    190             @Override
    191             public void handleMessage(Message msg) {
    192                 super.handleMessage(msg);
    193             }
    194         });
    195     }
    196 
    197     /**
    198      * Description 注销WIFI状态改变监听广播 
    199      */
    200     private void unregisterWifiChangeReceiver(){
    201         if (receiver != null) {
    202             unregisterReceiver(receiver);
    203         }
    204     }
    205     
    206     /**
    207      * Description  显示短时长显示的Toast 
    208      * @param text
    209      */
    210     @SuppressWarnings("unused")
    211     private void showShortToast(String text){
    212         Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
    213     }
    214     
    215     /**
    216      * Description  显示久时长显示的Toast 
    217      * @param text
    218      */
    219     private void showLongToast(String text){
    220         if (text != null && !"".equals(text)) {
    221             Toast.makeText(this, text, Toast.LENGTH_LONG).show();
    222         }
    223     }
    224 
    225     @Override
    226     public void onClick(View v) {
    227         switch (v.getId()) {
    228         
    229         case R.id.openLight:
    230             if (targetWifiEnable) {
    231                 showLongToast(HttpHelper.sendCommandToServer("A1"));
    232             }else{
    233                 initWifiConnection();
    234             }
    235             break;
    236             
    237         case R.id.closeLight:
    238             if (targetWifiEnable) {
    239                 showLongToast(HttpHelper.sendCommandToServer("B1"));
    240             }else{
    241                 initWifiConnection();
    242             }
    243             break;
    244 
    245         default:
    246             break;
    247         }
    248     }
    249     
    250     private Handler handler = new Handler(){
    251         public void handleMessage(Message msg) {
    252             if (targetWifiCanScan()) {
    253                 connectionTargetWifi();
    254             }
    255         }
    256     };
    257     
    258 }

    布局文件:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="fill_parent"
     4     android:layout_height="fill_parent"
     5     android:orientation="vertical"
     6     android:gravity="center_horizontal"
     7     android:padding="20dp">
     8     
     9     <TextView android:layout_width="wrap_content"
    10         android:layout_height="wrap_content"
    11         android:text="下面两个按钮可以控制序号为1的设备,指令分别为A1和B1.">
    12     </TextView>    
    13     
    14     <Button android:id="@+id/openLight"
    15         android:layout_width="wrap_content"
    16         android:layout_height="wrap_content"
    17         android:layout_marginTop="50dp"
    18         android:text="打开设备">
    19     </Button>
    20     
    21     <Button android:id="@+id/closeLight"
    22         android:layout_width="wrap_content"
    23         android:layout_height="wrap_content"
    24         android:layout_marginTop="20dp"
    25         android:text="关闭设备">
    26     </Button>    
    27 
    28 </LinearLayout>

    mainfest配置文件:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.shineEye.www"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7"/>
     8     
     9     
    10     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    11     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    12     <uses-permission android:name="android.permission.INTERNET"/>
    13 
    14     
    15     <application
    16         android:icon="@drawable/ic_launcher"
    17         android:label="@string/app_name"
    18         android:description="@string/appDescription">
    19         
    20         <activity
    21             android:name=".WifiAutoConnection"
    22             android:label="@string/app_name"
    23             android:theme="@android:style/Theme.Light.NoTitleBar" >
    24             <intent-filter>
    25                 <action android:name="android.intent.action.MAIN" />
    26                 <category android:name="android.intent.category.LAUNCHER" />
    27             </intent-filter>
    28         </activity>
    29         
    30         
    31     </application>
    32 
    33 </manifest>

    csdn资源下载地址审核过后即贴上!

     下载地址: http://download.csdn.net/detail/lufengdie/5285211

  • 相关阅读:
    Spring与MyBatis整合应用
    Spring与JDBC整合应用
    登录权限检查(SpringMVC)
    SpringMVC中文乱码问题
    SpringMVC异常处理
    SpringMVC注解应用
    Viewpager+fragment数据更新问题解析
    android adb 读写模式 挂载文件系统
    Android网络通信两种方法
    Win7、win2008中让IIS7支持asp的方法
  • 原文地址:https://www.cnblogs.com/lufengdie/p/3034803.html
Copyright © 2011-2022 走看看