Android Lollipop – Hotspot WiFi setWifiApEnabled () obtener InvocationTargetException
Estoy usando en la aplicación
setWifiApEnabled()
desde Hidden API (acceso por reflexión). En algunos teléfonos antiguos está funcionando (también con Samsung Galaxy S3, algunos teléfonos con 4,4, …), pero lo probé con Samsung Galaxy S5 y me
- Cómo obtener la dirección IP del router wifi conectado en android mediante programación?
- ¿Cómo puedo ver si Wi-Fi está conectado en Android?
- ¿La cerradura de WiFi no trabaja, cómo prevenir el ahorro de la energía del wifi?
- ¿Cómo ser notificado cuando un compañero ya no está disponible en la gama Wi-Fi Direct?
- SecurityException lanzada al llamar a WifiManager startScan
java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) ...
Estoy utilizando código similar, como allí Android 2.2 wifi hotspot API o ¿Cómo y qué configurar a Android WifiConfiguration.preSharedKey para conectarse a la red WPA2 PSK WiFi, pero es un código poco antiguo.
¿Tienes experiencia con ella? ¿Que sugieres?
PS no está funcionando también en algunos dispositivos Android 4.4 (pero no obtengo InvocationTargetException).
- Android Personalizar la exploración Wifi
- Cómo determinar mediante programación si android está conectado a wifi?
- Obtener el protocolo Wi-Fi (802.11a / b / g / n) mediante programación
- Obtener la dirección MAC del dispositivo: cuando el wifi está desactivado
- WifiManager.is5GHzBandSupported () mentir?
- Determine el ancho de banda de conexión de red (velocidad) wifi y datos móviles
- Conéctese con wifi particular programáticamente después de buscar las conexiones wifi disponibles
- Exploración de señales wifi sólo en banda 2.4Ghz
Yo tuve el mismo problema.
Añadido android.permission.WRITE_SETTINGS
al archivo de manifiesto y funcionó. Prueba esto.
Prueba esto.
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; }
En caso de tu excepción, intenta agregar este permiso a tu Manifiesto android.permission.WRITE_SETTINGS
Tienes que agregar estos permisos a tu 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" />
Esto funciona para mi.
Encontré la causa:
Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10260 nor current process has android.permission.CONNECTIVITY_INTERNAL.
Información:
¿Cómo puede la aplicación del sistema ubicada en / system / app tener permiso del sistema en Android 4.4 KitKat construir?
Es un pequeño gran problema 🙂
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) { } }
y
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" />
Completamente funciona en Android N.