android AP热点(wifi热点)开发

之前查了好多大牛的博客,总结了一下。

把代码分享给大家。     

功能:创建热点、获取热点名、检查是否开启wifi热点、关闭热点、开热点手机获取其他连入手机IP地址

 

想了解wifi开发的,看我的下一篇文章。   http://blog.csdn.net/guang_liang_/article/details/55224757

public class Wifi_APManager {

    private WifiManager mWifiManager;
    private Context mContext;

    public Wifi_APManager(Context context){
        this.mContext=context;
        mWifiManager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
    }


    /**
     * 创建热点
     * @param mSSID 热点名称
     * @param mPasswd 热点密码
     * @param isOpen 是否是开放热点
     */
    public void startWifiAp(String mSSID,String mPasswd,boolean isOpen){
       Method method1=null;
       try {
           method1=mWifiManager.getClass().getMethod("setWifiApEnabled",
                   WifiConfiguration.class,boolean.class);
           WifiConfiguration netConfig=new WifiConfiguration();

           netConfig.SSID=mSSID;
           netConfig.preSharedKey=mPasswd;
           netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
           netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
           netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
           if (isOpen) {
               netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
           }else {
               netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
           }
           netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
           netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
           netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
           netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
           method1.invoke(mWifiManager,netConfig,true);

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

    /**获取热点名**/
    public String getApSSID() {
        try {
            Method localMethod = this.mWifiManager.getClass().getDeclaredMethod("getWifiApConfiguration", new Class[0]);
            if (localMethod == null) return null;
            Object localObject1 = localMethod.invoke(this.mWifiManager,new Object[0]);
            if (localObject1 == null) return null;
            WifiConfiguration localWifiConfiguration = (WifiConfiguration) localObject1;
            if (localWifiConfiguration.SSID != null) return localWifiConfiguration.SSID;
            Field localField1 = WifiConfiguration.class .getDeclaredField("mWifiApProfile");
            if (localField1 == null) return null;
            localField1.setAccessible(true);
            Object localObject2 = localField1.get(localWifiConfiguration);
            localField1.setAccessible(false);
            if (localObject2 == null)  return null;
            Field localField2 = localObject2.getClass().getDeclaredField("SSID");
            localField2.setAccessible(true);
            Object localObject3 = localField2.get(localObject2);
            if (localObject3 == null) return null;
            localField2.setAccessible(false);
            String str = (String) localObject3;
            return str;
        } catch (Exception localException) {
        }
        return null;
    }


    /**
     * 检查是否开启Wifi热点
     * @return
     */
    public boolean isWifiApEnabled(){
        try {
            Method method=mWifiManager.getClass().getMethod("isWifiApEnabled");
            method.setAccessible(true);
            return (boolean) method.invoke(mWifiManager);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 关闭热点
     */
    public void closeWifiAp(){
        WifiManager wifiManager= (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
        if (isWifiApEnabled()){
            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 (InvocationTargetException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 开热点手机获得其他连接手机IP的方法
     * @return 其他手机IP 数组列表
     */
    public ArrayList<String> getConnectedIP(){
        ArrayList<String> connectedIp=new ArrayList<String>();
        try {
            BufferedReader br=new BufferedReader(new FileReader(
                    "/proc/net/arp"));
            String line;
            while ((line=br.readLine())!=null){
                String[] splitted=line.split(" +");
                if (splitted !=null && splitted.length>=4){
                    String ip=splitted[0];
                    if (!ip.equalsIgnoreCase("ip")){
                        connectedIp.add(ip);
                    }
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return connectedIp;
    }

}

 

 

Android开发中,创建WiFi热点并设置为5G频段通常需要通过`WifiManager` API以及`BroadcastReceiver`来实现。以下是基本步骤: 1. **获取权限**: 首先,你需要在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 2. **检查设备支持**: 使用`getSupportedFeatures()`检查设备是否支持5GHz频段。 3. **开启热点**: 创建一个`WifiConfiguration`实例,指定名称、密码和其他配置,并将其频率设为`WIFI_FREQUENCY_5GHZ`(例如 `WIFI frequency IEEE 802.11ac` 或 `2412` 对应于5GHz): ```java WifiConfiguration config = new WifiConfiguration(); config.SSID = "Your Hotspot Name"; config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.channel = 5; ``` 然后使用`setFrequency(channel)`设置频道。 4. **添加热点配置**: 将配置添加到热点服务列表中: ```java WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); int netId = wifiManager.addNetwork(config); wifiManager.enableNetwork(netId, true); ``` 5. **设置为默认热点**: 如果你想让这个热点成为默认的,可以调用`setDefaultNetwork()`。 6. **启动热点**: 调用`startScan()`开始扫描,然后`connect()`连接热点。 7. **监控状态**: 为了监听热点的状态变化,你可以创建一个`BroadcastReceiver`,注册接收`ACTION_WIFI_AP_CHANGED`广播。 注意:这只是一个基础示例,实际操作可能会因API版本和兼容性差异而有所不同。在实际应用中,你可能还需要处理异常情况和用户交互。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值