2015-05-29 4 views
4

I'm, используя в приложенииAndroid Lollipop - WiFi Hotspot setWifiApEnabled() получить InvocationTargetException

setWifiApEnabled() 

из Hidden API (доступ посредством отражения). В некоторых старых телефонов подмигнули работает (также с Samsung Galaxy S3, некоторые телефоны с 4,4, ...), но я тестировал с Samsung Galaxy S5 и я получаю

java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
... 

I'm, используя подобный код, как там Android 2.2 wifi hotspot API или How and what to set to Android WifiConfiguration.preSharedKey to connect to the WPA2 PSK WiFi network но это немного старый код.

Есть ли у вас опыт работы в компании? Что ты предлагаешь?

P.S. он не работает также на некоторых устройствах Android 4.4 (но я не получаю InvocationTargetException).

ответ

3

Попробуйте это.

ConnectivityManager cman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     Method[] methods = cman.getClass().getMethods(); 

     try 
     { 
      wifiManager.setWifiEnabled(false); 
      Method enableWifi = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); 
      String ssid = " " //your SSID 
      String pass = " " // your Password 
      WifiConfiguration myConfig = new WifiConfiguration(); 
      myConfig.SSID = ssid; 
      myConfig.preSharedKey = pass ; 
      myConfig.status = WifiConfiguration.Status.ENABLED; 
      myConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
      myConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
      myConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
      myConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
      myConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
      myConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
      myConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
      result = (Boolean) enableWifi.invoke(wifiManager, myConfig, true); 

     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
      result = false; 
     } 

В случае Вашего исключения попробуйте добавить это разрешение манифеста android.permission.WRITE_SETTINGS

+0

ли это решить проблему? –

+0

Я пробовал, но у меня все еще есть исключение. –

3

У меня была та же проблема.

Добавлено android.permission.WRITE_SETTINGS в файл манифеста, и это сработало. Попробуй это.

3

Вам нужно добавить эти разрешения к вашему AndroidManifest.xml:

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

Это работает для меня.

1
public void setWiFiApMode(boolean mode) { 
     if (mContext == null) return; 
     WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); 
     if (wifiManager == null) return; 
     try { 
      Method setWifiApEnabled = WifiManager.class.getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); 
      setWifiApEnabled.invoke(wifiManager, null, mode); 
     } catch (Exception e) { 
     } 
    } 

и

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

Полностью работает на Android N.

Смежные вопросы