Android 4.0.3创建wifi热点API

时间:2012-08-23 13:44:38

标签: android

您好我正在尝试从我的应用创建一个接入点。我可以站起来,但不能使用我设置的配置。我正在使用htc Sensation XE

WifiManager wifiManager = (WifiManager) rc.getSystemService(Context.WIFI_SERVICE);

if(wifiManager.isWifiEnabled())
{
    wifiManager.setWifiEnabled(false); 
}
Method[] wmMethods = wifiManager.getClass().getDeclaredMethods();
boolean methodFound=false;

WifiConfiguration netConfig = new WifiConfiguration();

netConfig.SSID = "MyWifiAP";
netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
for(Method method: wmMethods){
if(method.getName().equals("setWifiApEnabled")){                   
  methodFound=true;
  try {
  boolean apstatus=(Boolean) method.invoke(wifiManager, netConfig,true);
  for (Method isWifiApEnabledmethod: wmMethods){
        if(isWifiApEnabledmethod.getName().equals("isWifiApEnabled")){
           while(!(Boolean)isWifiApEnabledmethod.invoke(wifiManager)){
           };
           for(Method method1: wmMethods){
              if(method1.getName().equals("getWifiApState")){
                int apstate;
                apstate=(Integer)method1.invoke(wifiManager);
                for(Method method2: wmMethods){
                   if(method2.getName().equals("getWifiApConfiguration")){
                      try {
                         netConfig=(WifiConfiguration)method2.invoke(wifiManager);
                      } catch (IllegalArgumentException e) {
                          // TODO Auto-generated catch block
                          e.printStackTrace();
                      } catch (IllegalAccessException e) {
                          // TODO Auto-generated catch block
                          e.printStackTrace();
                      } catch (InvocationTargetException e) {
                          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }
                      Log.e("CLIENT", "\nSSID:"+netConfig.SSID+"\nPassword:"+netConfig.preSharedKey+"\n");                                          

                      if (apstate==0) {
                          Log.d("basura", "apstate es: "+apstate);
                      }
                   }
                }   
              }   
           }   
        } catch (IllegalArgumentException e) {
           e.printStackTrace();
        } catch (IllegalAccessException e) {
           e.printStackTrace();
        } catch (InvocationTargetException e) {
           e.printStackTrace();
        }
    }      
}

我打印时:

Log.e(“CLIENT”,“\ nSSID:”+ netConfig.SSID +“\ n密码:”+ netConfig.preSharedKey +“\ n”);

我明白了:

nSSID:空 n密码:空

1 个答案:

答案 0 :(得分:2)

我的HTC Desire和Android 2.2.2也有同样的问题。似乎许多(或所有)HTC设备无法以这种方式配置。 HTC可能已经重写了一些代码并限制了一些隐藏的功能。您正在使用通过反射在API中没有正式的方法(例如setWifiApEnabled)。在我的情况下,将创建热点,但使用默认配置。可能你有同样的问题。它适用于其他一些设备