Android 4.0.3创建wifi热点API

问题描述:

你好,我试图从我的应用程序创建一个接入点。我可以站在AP上,但不能使用我设置的配置。我使用的是HTC感觉XEAndroid 4.0.3创建wifi热点API

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( “客户”, “\ nSSID:” + netConfig.SSID + “\ n密码:” + netConfig.preSharedKey +“\ N“);

我得到:

nSSID:空 n密码:空

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