Android Lollipop - WiFi Hotspot setWifiApEnabled() get InvocationTargetException
Asked Answered
E

5

5

I'm using in the app

setWifiApEnabled()

from Hidden API (access by reflection). In some older phone it´s working (also with Samsung Galaxy S3, some phones with 4.4,...) but I tested it with Samsung Galaxy S5 and I get

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

I'm using similar code like there Android 2.2 wifi hotspot API or How and what to set to Android WifiConfiguration.preSharedKey to connect to the WPA2 PSK WiFi network but It´s a little old code.

Do you have experience with it? What do you suggest?

P.S. it's not working also in some Android 4.4 devices (but I don't get InvocationTargetException).

Eat answered 29/5, 2015 at 10:24 Comment(0)
D
3

Try This.

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;
        }

In case of your exception try add this permission to your Manifest android.permission.WRITE_SETTINGS

Diao answered 30/5, 2015 at 4:35 Comment(0)
R
3

You need to add these permissions to your 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" />

It works for me.

Rottenstone answered 31/7, 2015 at 10:19 Comment(0)
A
2

I had the same problem.

Added android.permission.WRITE_SETTINGS to the manifest file and it worked. Try this.

Almshouse answered 14/7, 2015 at 20:37 Comment(0)
L
2
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) {
        }
    }

and

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

Fully works on Android N.

Lieutenant answered 15/7, 2016 at 16:22 Comment(0)
E
1

I found the cause:

Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10260 nor current process has android.permission.CONNECTIVITY_INTERNAL.

Info:

How can system app located in /system/app have system permission in Android 4.4 KitKat build?

It´s a little big problem :)

Eat answered 2/6, 2015 at 11:16 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.