HTC Android Hotspot 热点配置 之DHCP

最近在研究手机热点的建立。HTC手机比较坑爹,首先一个,是不能按常规的办法修改 SSID, BSSID,

在网上搜了下,有篇博客把这个问题解决了,请参考:http://blog.sina.com.cn/s/blog_adc221ac01011mrs.html

然后就发现HTC手机热点是建好了,但是其他手机去连它,怎么也连不上,后来发现,使用静态IP能解决这个问题,但太麻烦了。

研究了下通过手动配置HTC的WiFi热点程序 com.htc.WiFiRouter 里面有一个Local DHCP的配置,把它勾上就能自动获取IP。

但要怎么样用代码实现呢这下坑爹了。

研究了半天,还是只有把HTC独有的类给它全部dump出来,代码如下

public void dumpHTCWifiFunction2(){
    	 Log.e(TAG, "dumpHTCWifiFunction2++");
//    	Method[] classMethods = null;
    	Field localField1;

    	Field[] fieldlist;
    	WifiConfiguration apConfig = new WifiConfiguration();
    	try {
      localField1 = WifiConfiguration.class.getDeclaredField("mWifiApProfile");
        localField1.setAccessible(true);

            Object localObject2 = localField1.get(apConfig);

            localField1.setAccessible(false);

            if(localObject2!=null){
            	fieldlist = localObject2.getClass().getDeclaredFields();

            	for (int i = 0;i < fieldlist.length; i++)

                {

                    Log.e(TAG, "found api: "+ fieldlist[i].getName());

                }
            }

    } catch (NoSuchFieldException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IllegalArgumentException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    	Log.e(TAG, "dumpHTCWifiFunction2--");
    }

12-28 11:06:29.956: E/MainActivity(3253): dumpHTCWifiFunction2++
12-28 11:06:29.966: E/MainActivity(3253): found api: DEFAULT_DHCP_MAX_AP_CONNECTION
12-28 11:06:29.966: E/MainActivity(3253): found api: DEFAULT_MAX_AP_CONNECTION
12-28 11:06:29.976: E/MainActivity(3253): found api: DHCP_MAX_AP_CONNECTION
12-28 11:06:29.976: E/MainActivity(3253): found api: MAX_AP_CONNECTION
12-28 11:06:29.976: E/MainActivity(3253): found api: OPEN
12-28 11:06:29.976: E/MainActivity(3253): found api: WEP
12-28 11:06:29.986: E/MainActivity(3253): found api: WPA
12-28 11:06:29.986: E/MainActivity(3253): found api: WPA2
12-28 11:06:29.986: E/MainActivity(3253): found api: BSSID
12-28 11:06:29.996: E/MainActivity(3253): found api: SSID
12-28 11:06:29.996: E/MainActivity(3253): found api: blocklist
12-28 11:06:29.996: E/MainActivity(3253): found api: whitelist
12-28 11:06:29.996: E/MainActivity(3253): found api: this$0
12-28 11:06:30.006: E/MainActivity(3253): found api: startingIP
12-28 11:06:30.006: E/MainActivity(3253): found api: dhcpSubnetMask
12-28 11:06:30.016: E/MainActivity(3253): found api: dnsIPAddr1
12-28 11:06:30.016: E/MainActivity(3253): found api: dnsIPAddr2
12-28 11:06:30.016: E/MainActivity(3253): found api: secureType
12-28 11:06:30.016: E/MainActivity(3253): found api: key
12-28 11:06:30.016: E/MainActivity(3253): found api: ipAddress
12-28 11:06:30.016: E/MainActivity(3253): found api: hiddenSSID
12-28 11:06:30.016: E/MainActivity(3253): found api: maxConns
12-28 11:06:30.016: E/MainActivity(3253): found api: maxDhcpClients
12-28 11:06:30.026: E/MainActivity(3253): found api: enableMacFilter
12-28 11:06:30.026: E/MainActivity(3253): found api: sleepPolicy
12-28 11:06:30.026: E/MainActivity(3253): found api: dhcpEnable
12-28 11:06:30.026: E/MainActivity(3253): found api: connectionArray
12-28 11:06:30.026: E/MainActivity(3253): found api: channel
12-28 11:06:30.026: E/MainActivity(3253): dumpHTCWifiFunction2--

发现了 dhcpEnable 这个成员变量,刚开始猜它是boolean变量,但错了,在设置的时候会发生错误。

干脆把它的类型也打印出来吧,打印语句改为:

Log.e(TAG, "found api: "+ fieldlist[i].getName()+" type:"+fieldlist[i].toString());

found api: dhcpEnable type:public int android.net.wifi.WifiConfiguration$HotspotProfile.dhcpEnable

原来它是int型变量,估且猜它是1为enable. 设置之后,果然可以。

完整代码如下:

private boolean setWifiSSIDForHTC(WifiConfiguration apConfig) {
      boolean successed = true;

//	    WifiConfiguration mnetConfig = new WifiConfiguration();
      Field localField1;

                      try {

                          localField1 = WifiConfiguration.class.getDeclaredField("mWifiApProfile");

                          localField1.setAccessible(true);

                          Object localObject2 = localField1.get(apConfig);

                          localField1.setAccessible(false);
                          if(localObject2!=null){

                              Field localField5 = localObject2.getClass().getDeclaredField("SSID");

                              localField5.setAccessible(true);

                              localField5.set(localObject2, apConfig.SSID);// netConfig.SSID);

                              localField5.setAccessible(false);

                              Field localField4 = localObject2.getClass().getDeclaredField("BSSID");

                              localField4.setAccessible(true);

                              localField4.set(localObject2, apConfig.BSSID);//netConfig.BSSID);

                              localField4.setAccessible(false);

                              Field localField6 = localObject2.getClass().getDeclaredField("dhcpEnable");

                                localField6.setAccessible(true);

//                                localField6.set(localObject2, "true");//netConfig.BSSID);
                                localField6.setInt(localObject2, 1);

                                localField6.setAccessible(false);

                          }

                      } catch(Exception e) {

                          e.printStackTrace();

                      }
      return successed;
  }
时间: 2024-10-25 06:43:48

HTC Android Hotspot 热点配置 之DHCP的相关文章

【转】Android Studio安装配置学习教程指南 下载和安装--不错

背景 相信大家对Android Studio已经不陌生了,Android Studio是Google于2013 I/O大会针对Android开发推出的新的开发工具,目前很多开源项目都已经在采用,Google的更新速度也很快,明显能感觉到这是Android开发的未来,那么我们还有什么理由不去拥抱未来呢? 虽然推出了很久,但是国内貌似普及的程度并不高,鉴于很多朋友求studio的详细教程,那么今天我就手把手教大家下载.安装.使用,Studio之路从这里开始. Android Studio VS Ec

JDK与adb/android环境变量配置完整教程

在这篇文章中,主要解决一个在Java或者Android开发中第一步需要解决的问题,那就是环境变量的配置.由于这部分在网上有很多教程,参差不齐.我这里主要是对JDK与adb/android两者的环境变量进行汇总,并且针对每一类配置提供几种不同的实现方式. [1]JDK环境变量配置 JDK的安装目录为:C:\Program Files (x86)\Java\jdk1.7.0_45.JDK环境变量配置共有三种方法,即绝对路径法.JAVA_HOME法.完整法. (1)绝对路径法:即JDK的环境变量的配置

Qt For Android 开发环境配置

想了想,还是再写一篇关于Qt for Android开发环境配置的教程. 准备:Java jdk,Android sdk,Android adb,Android ndk,Android ant,Qt 支持 安卓的版本,比如qt-opensource-windows-x86-android-5.6.2. 前言:在Qt的版本更新中,Qt支持的功能越来越多,安装包也越来越大,在Qt5.9出来之前,Qt的每个版本都对应的编译环境,而在Qt5.9后Qt官方将好多编译环境放到了一起,而在这里我要说的是要配置

android studio2.2 配置NDK

1.配置环境: Android studio2.2 配置NDK NDK版本[android-ndk-r13b-windows-x86_64.zip] NDK下载网址:[https://dl.google.com/android/repository/android-ndk-r13b-windows-x86_64.zip] 2.具体步骤: [1.下载NDK]:[https://dl.google.com/android/repository/android-ndk-r13b-windows-x86

PhoneGap与Jquery Mobile组合开发android应用的配置

PhoneGap与Jquery Mobile结合开发android应用的配置 由于工作需要,用到phonegap与jquery moblie搭配,开发android应用程序. 这些技术自己之前也都没接触过,可以说是压根没听说过,真是感慨,在开发领域,技术日新月异,知识真是永远学不完的.就算是做java开发的,可是细分下来,专业方向还是很多的:自己没有涉及的技术还是太多了,自个需要对单个领域专业点,知识丰富点.做不了全才,那咱做个专才,在如今社会还是必须的. 好了,咱们言归正传: PhoneGap

Android开发环境配置(以windows为例)

Android开发环境配置工具  如果你准备从事Android开发,那么无论选择在eclipse下开发,还是选择在AndroidStudio下开发,都可以参照以下步骤进行Android开发环境的配置. Android开发环境配置过程 1.准备笔记本或台式机 使用笔记本还是台式机,视个人需求而定,但我要强调的是在配置上不要手软,要舍得下手.一台流畅的电脑,会让你在枯燥的编程中不至于抓狂. 官方推荐的AndroidStudio或eclipse运行环境对电脑配置要求很低,现在市面上的电脑基本都可以达到

关于android studio的配置JAVA_HOME的问题

关于Android Studio的配置JAVA_HOME的问题 在配置环境变量时,我们一般配置JAVA_HOME的目录值为 C:\Program Files\Java\jdk1.8.0_45\bin 但是我们在打开Android Studio的时候会出现问题,无法打开,提示找不到对应的JVM,此时,我们只需要将值改为 C:\Program Files\Java\jdk1.8.0_45 即可,可能程序会自动去默认的bin目录中寻找相应的程序,因此,以后我们将JAVA_HOME的值配置为上述即可.

Mac系统cocos2dx + android 开发环境配置

Mac系统cocos2dx + android 开发环境配置 /****************************************************** 这遍文章主要转载自:http://www.cnblogs.com/wt616/p/3758828.html(这位大哥真的很牛,谢谢!) 然后,文章中又加入了一些自己的理解以及在实际操作过程中遇到问题的解决办法.而这些办法也是来自于伟大 的网友,但由于搜索的比较多,很多出处地址都没有记录好,抱歉,若你们看到,告诉我,我再加上地

[笔记]Android开发环境配置及HelloWorld程序

Android的开发需要以下四个工具: 1.JDK 2.Eclipse 3.Android SDK 4.ADT 具体功能: 1.JDK.JDK即Java Development Kit(Java开发工具包),包括JAVA运行环境,基础类库和JAVA工具,是JAVA运行的基础. 2.Eclipse.Eclipse是开发JAVA程序的软件工具. 3.Android SDK.SDK即Software Development Kit(软件开发工具包).AndroidSDK指的是Android专属的软件开