Android WiFi开发教程(一)——WiFi热点的创建与关闭

来源:互联网 发布:sybase恢复数据库 编辑:程序博客网 时间:2024/05/21 17:35

原文地址:http://blog.csdn.net/a1533588867/article/details/52459284


相对于BlueTooth,WiFi是当今使用最广的一种无线网络传输技术, 几乎所有智能手机、平板电脑和笔记本电脑都支持Wi-Fi上网。因此,掌握基本的WiFI开发技术是非常必要的。本教程将围绕一个小Demo初步与大家一同探讨WiFi开发。

先上效果图

这里写图片描述
这里写图片描述 
这里写图片描述

Demo功能比较简单,四个按钮、两个文本和一个列表。功能主要有创建WiFi热点,关闭WiFi热点,搜索WiFi,连接WiFi,数据通讯。源码会在教程结尾提供。

本章节主要介绍WiFi热点的创建和关闭

需要用到的权限

 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>    <uses-permission android:name="android.permission.INTERNET"/>
  • 1
  • 2
  • 3
  • 4
  • 5

WiFi热点的创建

/**     * 创建Wifi热点     */    private void createWifiHotspot() {        if (wifiManager.isWifiEnabled()) {            //如果wifi处于打开状态,则关闭wifi,            wifiManager.setWifiEnabled(false);        }        WifiConfiguration config = new WifiConfiguration();        config.SSID = WIFI_HOTSPOT_SSID;        config.preSharedKey = "123456789";        config.hiddenSSID = true;        config.allowedAuthAlgorithms                .set(WifiConfiguration.AuthAlgorithm.OPEN);//开放系统认证        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);        config.allowedPairwiseCiphers                .set(WifiConfiguration.PairwiseCipher.TKIP);        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);        config.allowedPairwiseCiphers                .set(WifiConfiguration.PairwiseCipher.CCMP);        config.status = WifiConfiguration.Status.ENABLED;        //通过反射调用设置热点        try {            Method method = wifiManager.getClass().getMethod(                    "setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);            boolean enable = (Boolean) method.invoke(wifiManager, config, true);            if (enable) {                textview.setText("热点已开启 SSID:" + WIFI_HOTSPOT_SSID + " password:123456789");            } else {                textview.setText("创建热点失败");            }        } catch (Exception e) {            e.printStackTrace();            textview.setText("创建热点失败");        }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

这里我们需要用到一个很重要的API——WifiManager。源码中是有这么一段介绍:

This class provides the primary API for managing all aspects of Wi-Ficonnectivity. Get an instance of this class by calling{@link android.content.Context#getSystemService(String) Context.getSystemService(Context.WIFI_SERVICE)}.
  • 1
  • 2
  • 3

可以了解到,我们能够通过WifiManager来管理WiFi的连接。而通过Context.getSystemService(Context.WIFI_SERVICE)就能获取到它的实例。

wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
  • 1

在开启热点的时候,我们需要确保WiFi是关闭状态,因为大部分手机都是不支持热点和WiFi是同时开启的。接着就需要创建WifiConfiguration这个类,由于配置我们所要创建的热点的属性。这里我们所需注意的主要是SSID、preSharedKey和KeyMgmt。 分别对应热点的名称、密码和加密方式。

配置完属性后,我们就可以通过Java的反射机制去创建热点。

WiFi热点的关闭

/**     * 关闭WiFi热点     */    public void closeWifiHotspot() {        try {            Method method = wifiManager.getClass().getMethod("getWifiApConfiguration");            method.setAccessible(true);            WifiConfiguration config = (WifiConfiguration) method.invoke(wifiManager);            Method method2 = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);            method2.invoke(wifiManager, config, false);        } catch (NoSuchMethodException e) {            e.printStackTrace();        } catch (IllegalArgumentException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (InvocationTargetException e) {            e.printStackTrace();        }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

跟创建WiFI热点一样,关闭的时候同样需要用到Java的反射机制。在调用Method的invoke方法时,将最后一个参数改成false就可以了。

相对来说,WiFi热点的创建与关闭还是比较简单的。欢迎继续阅读下一篇Android WiFi开发教程(二)——WiFi的搜索和连接


阅读全文
0 0
原创粉丝点击