WIFI (热点)打开和关闭

在Android中,很多地方都会用到getSystemService()方法去获取一个ServiceManager对象。对WIFI的操作也不列外。如果我们想要进行一系列的wifi操作,也需要先获取到这个对象。下面以具体代码来进行分析。

  • 打开WIFI
    我们知道,当我们想要连接一个热点进行上网的时候,我们需要做的第一件事就是打开我们的wifi。所以,下面让我们看看通过代码如何打开wifi。

    1. 获取WifiManager对象
    2. 调用 wifiManager.setWifiEnabled(true)方法
 wifiManager = (WifiManager)  getApplicationContext().getSystemService(Context.WIFI_SERVICE);
 wifiManager.setWifiEnabled(true);
打开wifi就这么简单,当然请别忘了去申请相应的权限。
 <uses-permission  android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.CHANGE_NETWORKE"/>
  • 关闭WIFI
    通过上面的打开wifi,你肯定已经猜到了怎样关闭wifi了吧。是的,只需要将参数改为true;

    wifiManager.setWifiEnabled(true);

  • 创建热点
    经过上面的两个体验,你可能已经觉得wifi的操作很简单了吧。不过,打开热点可能会稍微麻烦一点,因为,google把打开热点的api给hide(隐藏)了,也就是说这个方法你是无法在代码里面调用的,当然也就没办法实现创建热点的操作!然而办法还是有的,我们可以使用Java反射。因为只是把它隐藏了,并不代表它不存在。所以,我以通过反射得到相应的对象,进而调用相应方法创建热点。
    代码如下:

 public void createWifiHotspot(View view) {
        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) {
                Log.d(TAG, "热点已开启 SSID:" + WIFI_HOTSPOT_SSID + " password:123456789");

            } else {
                Log.d(TAG, "创建热点失败");
            }
        } catch (Exception e) {
            e.printStackTr败
因ace();
            Log.d(TAG闭 }
    }
  • 关闭热点
    为我们创建热点的时候使用了反射,所以关闭的时候我们也使用反射。
 public void closeWifiHotspot(View view) {
        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);
            Log.d(TAG, "热点已关闭 SSID:");

        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

下一篇:WIFI 扫描和连接热点

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值