0

Error while enable hotspot in android M (6.0) , this is my Code

WifiConfiguration netConfig = new WifiConfiguration();
netConfig.SSID = "test_network";
netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

Method setWifiApMethod = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
boolean apStatus = (Boolean) setWifiApMethod.invoke(mWifiManager, netConfig, true);

Permition in Manifests

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

Error while enable hotspot

java.lang.reflect.InvocationTargetException
         at java.lang.reflect.Method.invoke(Native Method)
         at com.whitebyte.wifihotspotutils.WifiApManager.setWifiApEnabled(WifiApManager.java:57)
         at com.whitebyte.hotspotcontrolexample.Main.onMenuItemSelected(Main.java:81)
         at com.android.internal.policy.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1217)
         at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761)
         at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
         at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904)
         at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894)
         at com.android.internal.view.menu.MenuPopup.onItemClick(MenuPopup.java:128)
         at android.widget.AdapterView.performItemClick(AdapterView.java:310)
         at android.widget.AbsListView.performItemClick(AbsListView.java:1155)
         at android.widget.AbsListView$PerformClick.run(AbsListView.java:3152)
         at android.widget.AbsListView$3.run(AbsListView.java:4067)
         at android.os.Handler.handleCallback(Handler.java:751)
         at android.os.Handler.dispatchMessage(Handler.java:95)
         at android.os.Looper.loop(Looper.java:154)
         at android.app.ActivityThread.main(ActivityThread.java:6123)
         at java.lang.reflect.Method.invoke(Native Method)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
      Caused by: java.lang.SecurityException: com.whitebyte.hotspotclients was not granted  this permission: android.permission.WRITE_SETTINGS.
         at android.os.Parcel.readException(Parcel.java:1683)
         at android.os.Parcel.readException(Parcel.java:1636)
         at android.net.wifi.IWifiManager$Stub$Proxy.setWifiApEnabled(IWifiManager.java:1681)
         at android.net.wifi.WifiManager.setWifiApEnabled(WifiManager.java:1606)
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.whitebyte.wifihotspotutils.WifiApManager.setWifiApEnabled(WifiApManager.java:57) 
         at com.whitebyte.hotspotcontrolexample.Main.onMenuItemSelected(Main.java:81) 
         at com.android.internal.policy.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1217) 
         at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761) 
         at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
         at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904) 
         at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894) 
         at com.android.internal.view.menu.MenuPopup.onItemClick(MenuPopup.java:128) 
         at android.widget.AdapterView.performItemClick(AdapterView.java:310) 
         at android.widget.AbsListView.performItemClick(AbsListView.java:1155) 
         at android.widget.AbsListView$PerformClick.run(AbsListView.java:3152) 
         at android.widget.AbsListView$3.run(AbsListView.java:4067) 
         at android.os.Handler.handleCallback(Handler.java:751) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:154) 
         at android.app.ActivityThread.main(ActivityThread.java:6123) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757) 
Komal12
  • 3,340
  • 4
  • 16
  • 25
  • Bishakh mentioned WRITE_SETTINGS permission. There is more to do if you use this. See this:http://stackoverflow.com/questions/32083410/cant-get-write-settings-permission – Opiatefuchs May 22 '17 at 06:10
  • Docs for WRITE_SETTINGS: https://developer.android.com/reference/android/Manifest.permission.html#WRITE_SETTINGS – Opiatefuchs May 22 '17 at 06:13

2 Answers2

2

You are getting error because you are not allowing permission, as starting android 6.0 you have to explicitly ask for permissions.

First declare permission in manifest

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

And then ask for permission.

boolean permission;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        permission = Settings.System.canWrite(context);
    } else {
        permission = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_SETTINGS) == PackageManager.PERMISSION_GRANTED;
    }
    if (permission) {
        //do your code
    }  else {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
            intent.setData(Uri.parse("package:" + context.getPackageName()));
            context.startActivityForResult(intent, MainActivity.CODE_WRITE_SETTINGS_PERMISSION);
        } else {
            ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.WRITE_SETTINGS}, MainActivity.CODE_WRITE_SETTINGS_PERMISSION);
        }
    }
Abdul Kawee
  • 2,687
  • 1
  • 14
  • 26
1

According to the error, you need to include the permission

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

Outside the application tag in your manifest.

Dillon Burton
  • 131
  • 10
Bishakh Ghosh
  • 1,205
  • 9
  • 17