web-dev-qa-db-ja.com

Android Oreo 8.xで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とパスワード。これを行う方法がわかりません。事前に感謝します。

気にする人のために...:

学校のプロジェクトでは、特定の暗号でワイヤレスネットワークに接続できる場合はいつでもロックを解除するロッカーを作成しました。そのため、プログラムでホットスポットを設定する必要があります。

23
Markinson

問題の部分的な解決策しかありません。うまくいけば、あなたが設計しているアプリケーションに十分なものになるでしょう。

SSIDとパスワードは、Hotspotの起動時にAndroidシステムによってハードコーディングされます。 AOSPコードでは、同じホットスポットを複数のアプリケーションで共有できることがわかります。このホットスポット(クラス名はWifiConfiguration)の構成も、要求元のすべてのアプリケーションと共有されます。この構成はアプリケーションに返されます。コールバックでonStarted(LocalOnlyHotspotReservation reservation)reservation.getWifiConfiguration()を呼び出すことでWifiConfigurationを取得できます。必要なすべての情報をWifiConfigurationオブジェクトから取得します。事前共有キーとアクセスポイント名をreadできますが、変更できないと思います


FYI、wifi構成を設定する関連コード(ハー​​ドコーディングされたSSIDおよびWPA2-PSKキーを含む)は、次のコードによって実行されます

  /**
   * 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;
   }
10
pellucide