2017-12-07 21 views
13

私は、次のコードスニペットを使用しています:変更WiFiホットスポットのSSIDとパスワード私のAndroidアプリケーションで

@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()); 
} 

コードのこの作品は、「AndroidShare_1234」のようなものをという名前のホットスポットを作成します。私のプロジェクトでは、このホットスポットにパスワードとSSIDを設定する必要がありますが、これを行う方法は見つけられません。私はMyHotspotのようなSSIDとカスタムパスワードを持つホットスポットを作成したいと思います。

setWifiApEnabledはAndroid Oではサポートされていないことに注意してください。これはAndroidの古いバージョンで行われています。しかし、私はまだプログラムでSSIDとパスワードを使ってWiFiホットスポットを作る必要があります。私はこれを行う方法を理解することはできません。前もって感謝します!気に誰のために

...:

学校のプロジェクトのためには、私はそれが特定のcridentialsでワイヤレスネットワークに接続することができたときにロックを解除ロッカー、プログラムでホットスポットを設定するので、必要性を作りました。

+0

私はあなたに答えはありませんが、Bluetoothを使用して認証を実行するか、ネットワークSSIDを公開することを検討しましたか? – nitzanms

+0

'' startLocalOnlyHotspot''のドキュメントによると、ホットスポットはいくつかのアプリケーション間で共有されるかもしれないことに注意してください。これは、SSIDの変更が正式にサポートされる可能性は低いことを示しています。 – nitzanms

答えて

2

私はこの問題を部分的に解決しています。うまくいけば、あなたが設計しようとしているアプリケーションにとっては十分です。

ホットスポットを起動すると、アンドロイドシステムによってSSIDとパスワードがハードコードされます。 AOSPコードを見て、複数のアプリケーションで同じホットスポットを共有できることがわかりました。このホットスポット(クラス名はWifiConfiguration)のこの設定は、要求しているすべてのアプリケーションとも共有されています。この設定は、コールバックonStarted(LocalOnlyHotspotReservation reservation)のアプリケーションに戻されます。電話番号reservation.getWifiConfiguration()WifiConfigurationを入手できます。 WifiConfigurationオブジェクトから、必要な情報をすべて取得します。したがって、の事前共有キーとアクセスポイント名を読み取ることができます。しかし、私はあなたが(ハードコードされたSSIDとWPA2-PSKキーを含む)無線LANの設定を設定し、関連するコードは、コード

の以下の部分で行われ、FYI彼らに


を変更することができるとは思いません
/** 
    * 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; 
    } 
関連する問題