移动热点的开启和关闭

创建wifi热点首先需要手机支持,其实创建热点很简单,先获取到wifi的服务,再配置热点名称、密码等等,然后再通过反射打开它就OK了。



密码可以随便填写


public static void createAp(Context context,String SSID,String passWord) {

        try {
            WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            //开启热点先关闭Wifi
            if (manager.isWifiEnabled()) {
                manager.setWifiEnabled(false);
            }
            WifiConfiguration apConfiguration = new WifiConfiguration();
            apConfiguration.SSID = SSID;
            apConfiguration.preSharedKey = passWord;
            apConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
            Method method = manager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
            method.invoke(manager, apConfiguration, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


 public static String getSSID(Context context){
        String ssid = null;
        try {
            WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            //拿到getWifiApConfiguration()方法
            Method method = manager.getClass().getDeclaredMethod("getWifiApConfiguration");
            //调用getWifiApConfiguration()方法,获取到 热点的WifiConfiguration
            WifiConfiguration configuration = (WifiConfiguration) method.invoke(manager);
            ssid = configuration.SSID;
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return ssid;
    }

二、Android 8.0开启热点

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

在Android8.0上用以前的方式调试WiFi热点的时候发现无法正常开启热点,原先的接口WifiManager.java中setWifiApEnabled方法用来打开WiFi热点已经用不了了。
Google给的源码时发现7.1.1-7.1.2版本都是没有变动,还是老的接口,从Android8.0才开始发生变化

添加权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG" />

/** 
     * 8.0 开启热点方法 
     * 注意:这个方法开启的热点名称和密码是手机系统里面默认的那个 
     * @param context 
     */  
    public static void setWifiApEnabledForAndroidO(Context context, boolean isEnable){  
        ConnectivityManager connManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);  
  
        Field iConnMgrField = null;  
        try {  
            iConnMgrField = connManager.getClass().getDeclaredField("mService");  
            iConnMgrField.setAccessible(true);  
            Object iConnMgr = iConnMgrField.get(connManager);  
            Class<?> iConnMgrClass = Class.forName(iConnMgr.getClass().getName());  
  
            if(isEnable){  
                Method startTethering = iConnMgrClass.getMethod("startTethering", int.class, ResultReceiver.class, boolean.class);  
                startTethering.invoke(iConnMgr, 0, null, true);  
            }else{  
                Method startTethering = iConnMgrClass.getMethod("stopTethering", int.class);  
                startTethering.invoke(iConnMgr, 0);  
            }  
  
        } catch (NoSuchFieldException e) {  
            e.printStackTrace();  
        } catch (NoSuchMethodException e) {  
            e.printStackTrace();  
        } catch (IllegalAccessException e) {  
            e.printStackTrace();  
        } catch (InvocationTargetException e) {  
            e.printStackTrace();  
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        }  
    }  


原文地址:

wifi启动过程:

https://www.2cto.com/kf/201609/545105.html



获取wifiSSID:

https://www.cnblogs.com/rokey/p/6274675.html


通过反射创建wifi热点:

https://blog.csdn.net/feitian_666/article/details/51330388



Android6.0开启wifi

https://blog.csdn.net/a_zhon/article/details/52764891
得到wifi列表、开启或者关闭wifi、wifi热点
https://blog.csdn.net/a_zhon/article/details/52472657
手机root后通过命令获取wifi的列表和密码
https://blog.csdn.net/jdsjlzx/article/details/40857039
通过手动打开一次wifi,监听wifi广播来获取wifi信息
https://blog.csdn.net/u011974987/article/details/50551580/
通过root方式获取wifi的账号和密码
https://www.jianshu.com/p/f10f78cbc314
创建热点的各个使用方法
https://blog.csdn.net/a_zhon/article/details/52472657

https://blog.csdn.net/u011520181/article/details/46496377
WIFI热点的创建与关闭
https://www.cnblogs.com/wanghuaijun/p/7148290.html


Android 8.0热点的创建与关闭
https://blog.csdn.net/bukker/article/details/78649504




ANDROID 8.0热点开启
https://blog.csdn.net/u010593870/article/details/79597437

2、需要注意的地方

①Android没有提供标准的api供我们使用,所以只能采取反射机制,去调用hide掉的接口②wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi3、将targetSdkVersion改成22,可以在部分手机上解决6.0手机不管用的问题

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页