Some htc phones seems to use a class of typeHotspotProfileto keep its configuration. So, before callingsetWifiApEnabled, you need set the ssid in htc's way:

boolean isHtc = false;

try {

isHtc = WifiConfiguration.class

.getDeclaredField("mWifiApProfile") != null;

} catch (java.lang.NoSuchFieldException e) {

isHtc = false;

}

WifiConfiguration apConfig = new WifiConfiguration();

apConfig.SSID = "H3c_xx";

apConfig.preSharedKey = "h3ch3ch3c";

apConfig.allowedKeyManagement

.set(WifiConfiguration.KeyMgmt.WPA_PSK);

if (isHtc) {

setHTCSSID(apConfig);

}

// 通过反射调用设置热点

Method method;

method = wifiManager.getClass().getMethod("setWifiApEnabled",

WifiConfiguration.class, Boolean.TYPE);

// 返回热点打开状态

boolean flag = (Boolean) method.invoke(wifiManager, apConfig, true);

设置SSID和密码

public void setHTCSSID(WifiConfiguration config) {

try {

Field mWifiApProfileField = WifiConfiguration.class

.getDeclaredField("mWifiApProfile");

mWifiApProfileField.setAccessible(true);

Object hotSpotProfile = mWifiApProfileField.get(config);

mWifiApProfileField.setAccessible(false);

if (hotSpotProfile != null) {

Field ssidField = hotSpotProfile.getClass().getDeclaredField(

"SSID");

ssidField.setAccessible(true);

ssidField.set(hotSpotProfile, config.SSID);

ssidField.setAccessible(false);

Field localField3 = hotSpotProfile.getClass().getDeclaredField(

"key");

localField3.setAccessible(true);

localField3.set(hotSpotProfile, config.preSharedKey);

localField3.setAccessible(false);

Field localField6 = hotSpotProfile.getClass().getDeclaredField(

"dhcpEnable");

localField6.setAccessible(true);

localField6.setInt(hotSpotProfile, 1);

localField6.setAccessible(false);

}

} catch (Exception e) {

e.printStackTrace();

}

}

可以通过遍历属性的方法查看还有那些可以修改的值:

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()

+ " type:" + fieldlist[i].toString());

}

}

} catch (NoSuchFieldException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

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

}

如:

found api: DEFAULT_DHCP_MAX_AP_CONNECTION type:public static final int android.net.wifi.WifiConfiguration$HotspotProfile.DEFAULT_DHCP_MAX_AP_CONNECTION

found api: DEFAULT_MAX_AP_CONNECTION type:public static final int android.net.wifi.WifiConfiguration$HotspotProfile.DEFAULT_MAX_AP_CONNECTION

found api: DHCP_MAX_AP_CONNECTION type:public static final int android.net.wifi.WifiConfiguration$HotspotProfile.DHCP_MAX_AP_CONNECTION

found api: MAX_AP_CONNECTION type:public static final int android.net.wifi.WifiConfiguration$HotspotProfile.MAX_AP_CONNECTION

found api: OPEN type:public static final java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.OPEN

found api: WEP type:public static final java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.WEP

found api: WPA type:public static final java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.WPA

found api: WPA2 type:public static final java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.WPA2

found api: BSSID type:public java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.BSSID

found api: SSID type:public java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.SSID

found api: blocklist type:public [Ljava.lang.String; android.net.wifi.WifiConfiguration$HotspotProfile.blocklist

found api: whitelist type:public [Ljava.lang.String; android.net.wifi.WifiConfiguration$HotspotProfile.whitelist

found api: this$0 type:final android.net.wifi.WifiConfiguration android.net.wifi.WifiConfiguration$HotspotProfile.this$0

found api: startingIP type:public java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.startingIP

found api: dhcpSubnetMask type:public java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.dhcpSubnetMask

found api: dnsIPAddr1 type:public java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.dnsIPAddr1

found api: dnsIPAddr2 type:public java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.dnsIPAddr2

found api: secureType type:public java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.secureType

found api: key type:public java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.key

found api: ipAddress type:public java.lang.String android.net.wifi.WifiConfiguration$HotspotProfile.ipAddress

found api: hiddenSSID type:public boolean android.net.wifi.WifiConfiguration$HotspotProfile.hiddenSSID

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

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

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

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

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

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

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐