2015-12-09 15 views
7

Ich habe versucht, Wifi Tethering Hotspot in Android Marshmallow mit folgendem Code zu erstellen.Wie Wifi Tethering Hotspot in Android Marshmallow erstellen?

public class WifiAccessManager { 

private static final String SSID = "1234567890abcdef"; 
public static boolean setWifiApState(Context context, boolean enabled) { 
    //config = Preconditions.checkNotNull(config); 
    try { 
     WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     if (enabled) { 
      mWifiManager.setWifiEnabled(false); 
     } 
     WifiConfiguration conf = getWifiApConfiguration(); 
     mWifiManager.addNetwork(conf); 

     return (Boolean) mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class).invoke(mWifiManager, conf, enabled); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

public static WifiConfiguration getWifiApConfiguration() { 
    WifiConfiguration conf = new WifiConfiguration(); 
    conf.SSID = SSID; 
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
    return conf; 
} 

}

Aber es folgendes Berechtigungsproblem angezeigt wird. .

java.lang.SecurityException: googleplus.tarun.info.hotspotcreation was not granted either of these permissions: android.permission.CHANGE_NETWORK_STATE, android.permission.WRITE_SETTINGS. 

Aber ich habe bereits diese auf Manifest hinzugefügt. .

Wie kann ich das Problem lösen?

Antwort

-1

Ich denke, Android M unterstützt nicht, Hotspot programmgesteuert zu erstellen. Sie können Ihren Marshmallow-Benutzer zur Einstellungsseite bringen, um selbst einen Hotspot zu erstellen. Unter dem Code wird dir helfen, die Einstellungsseite zu gehen.

startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK)); 
1

Ich arbeitete in Android Marshmallow und habe eine Möglichkeit gefunden, WiFi Tethering wie unten beschrieben zu erstellen. Beachten Sie, dass Ihre Apps gemäß Android 6.0 Changes den Status von WifiConfiguration-Objekten nur dann ändern können, wenn Sie diese Objekte erstellt haben. Und ab Android 6.0 (API-Stufe 23) gewähren Benutzer Berechtigungen für Anwendungen, während die App ausgeführt wird, und nicht, wenn sie die App installieren. Read this article to know more about this. Ich kann sehen, dass Sie selbst Hotspot erstellen. Also kein Problem. Die Erlaubnis in Manifest ist unten angegeben:

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

ich die folgende Funktion bin mit WiFi erstellen Hotspot Anbindehaltung in android Eibisch:

public void setWifiTetheringEnabled(boolean enable) { 
    //Log.d(TAG,"setWifiTetheringEnabled: "+enable); 
    String SSID=getHotspotName(); // my function is to get a predefined SSID 
    String PASS=getHotspotPassword(); // my function is to get a predefined a Password 

    WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 

    if(enable){ 
     wifiManager.setWifiEnabled(!enable); // Disable all existing WiFi Network 
    }else { 
     if(!wifiManager.isWifiEnabled()) 
      wifiManager.setWifiEnabled(!enable); 
    } 
    Method[] methods = wifiManager.getClass().getDeclaredMethods(); 
    for (Method method : methods) { 
     if (method.getName().equals("setWifiApEnabled")) { 
      WifiConfiguration netConfig = new WifiConfiguration(); 
      if(!SSID.isEmpty() || !PASS.isEmpty()){ 
       netConfig.SSID=SSID; 
       netConfig.preSharedKey = PASS; 
       netConfig.hiddenSSID = false; 
       netConfig.status = WifiConfiguration.Status.ENABLED; 
       netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
       netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
       netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
       netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
       netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
       netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
       netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
      } 
      try { 
       method.invoke(wifiManager, netConfig, enable); 
       Log.e(TAG,"set hotspot enable method"); 
      } catch (Exception ex) { 
      } 
      break; 
     } 
    } 
} 

den Hotspot den Funktionsaufruf Enabling ist: setWifiTetheringEnabled(true) und für disable setWifiTetheringEnabled(false) .

Das ist es.

N.B. Beachten Sie, dass SIM-weniger Geräte nicht zur Verwendung von Hotspot unterstützt werden. Sie können den Hotspot auf diesen Geräten ohne root nicht erstellen.

Ich hoffe, dies wird für die kommenden Besucher hilfreich sein.