2017-12-07 5 views
13

In meinem Android-Anwendung, die ich mit dem folgenden Code-Schnipsel:ändern WiFi-Hotspot-SSID und das Passwort in Android Oreo 8.x

@RequiresApi(api = Build.VERSION_CODES.O) 
private void turnOnHotspot(){ 
    WifiManager manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); 

    manager.startLocalOnlyHotspot(new WifiManager.LocalOnlyHotspotCallback(){ 

     @Override 
     public void onStarted(WifiManager.LocalOnlyHotspotReservation reservation) { 
      super.onStarted(reservation); 
      Log.d(TAG, "Wifi Hotspot is on now"); 
     } 

     @Override 
     public void onStopped() { 
      super.onStopped(); 
      Log.d(TAG, "onStopped: "); 
     } 

     @Override 
     public void onFailed(int reason) { 
      super.onFailed(reason); 
      Log.d(TAG, "onFailed: "); 
     } 
    },new Handler()); 
} 

Dieses Stück Code erzeugt einen Hotspot so etwas wie "AndroidShare_1234" genannt. Für ein Projekt von mir muss ich in der Lage sein, ein Passwort und eine SSID zu diesem Hotspot zu setzen, aber ich kann keinen Weg finden, dies zu tun. Ich möchte einen Hotspot mit einer SSID wie MyHotspot und einem benutzerdefinierten Passwort erstellen.

Beachten Sie, dass die setWifiApEnabled nicht mehr in Android O unterstützt wird, wie es in älteren Versionen von Android getan wird. Ich muss jedoch immer noch einen WLAN-Hotspot mit einer SSID und einem Passwort programmieren. Ich kann nicht herausfinden, wie das geht. Danke im Voraus!

Für wen interessiert ...:

für ein Schulprojekt habe ich einen Schrank, die entriegelt, wenn es zu einem drahtlosen Netzwerk mit bestimmten cridentials verbinden kann, daher die Notwendigkeit der programmatisch einen Hotspot einstellen.

+0

Ich habe keine Antwort für Sie, aber haben Sie in Betracht gezogen, mit Bluetooth entweder die Authentifizierung durchzuführen oder die Netzwerk-SSID zu veröffentlichen? – nitzanms

+0

Beachten Sie, dass gemäß der Dokumentation von '' startLocalOnlyHotspot'' der Hotspot von mehreren Apps geteilt werden kann. Dies zeigt an, dass das Ändern der SSID wahrscheinlich nicht offiziell unterstützt wird. – nitzanms

Antwort

2

Ich habe nur eine Teillösung für das Problem. Hoffentlich reicht es für die Anwendung, die Sie entwerfen.

Die SSID und das Passwort werden vom Android-System beim Start des Hotspots fest codiert. Wenn ich auf den AOSP-Code schaue, sehe ich, dass derselbe Hotspot von mehreren Anwendungen gemeinsam genutzt werden kann. Diese Konfiguration für diesen Hotspot (Klassenname ist WifiConfiguration) wird auch mit allen anfordernden Anwendungen geteilt. Diese Konfiguration wird im Callback onStarted(LocalOnlyHotspotReservation reservation) an die Anwendung zurückgegeben. Sie können die WifiConfiguration erhalten, indem Sie reservation.getWifiConfiguration() aufrufen. Sie erhalten alle benötigten Informationen vom Objekt WifiConfiguration. So können Sie den Pre-Shared Key und den Access Point-Namen lesen. Aber ich glaube nicht, können Sie sie ändern


FYI, Der entsprechende Code, der die WLAN-Konfiguration einrichtet (einschließlich der hartcodierte SSID und WPA2-PSK-Schlüssel) durch das folgende Stück Code erfolgt

/** 
    * Generate a temporary WPA2 based configuration for use by the local only hotspot. 
    * This config is not persisted and will not be stored by the WifiApConfigStore. 
    */ 
    public static WifiConfiguration generateLocalOnlyHotspotConfig(Context context) { 
     WifiConfiguration config = new WifiConfiguration(); 
     config.SSID = context.getResources().getString(
       R.string.wifi_localhotspot_configure_ssid_default) + "_" 
         + getRandomIntForDefaultSsid(); 
     config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK); 
     config.networkId = WifiConfiguration.LOCAL_ONLY_NETWORK_ID; 
     String randomUUID = UUID.randomUUID().toString(); 
     // first 12 chars from xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx 
     config.preSharedKey = randomUUID.substring(0, 8) + randomUUID.substring(9, 13); 
     return config; 
    } 
Verwandte Themen