24

Android 2.2 (Froyo) で Wifi ホットスポットを作成するために必要な API 呼び出しは何ですか (テザリングとポータブル ホットスポットの設定項目に表示されています)。

4

3 に答える 3

42

あなたは呼び出すことができます

private boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled);

リフレクションの使用:)

WifiManagerリフレクションを使用して宣言されたメソッドを取得した後WifiManager、このメソッド名を探し、オブジェクトsetWifiApEnabledを介して呼び出しますWifiManager

これらの API は @hide としてマークされているため、現在直接使用することはできませんが、WifiManager の AIDL に表示されるため、アクセス可能です!

例は次のとおりです。

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
Method[] wmMethods = wifi.getClass().getDeclaredMethods();
for(Method method: wmMethods){
  if(method.getName().equals("setWifiApEnabled")){
    WifiConfiguration netConfig = new WifiConfiguration();
    netConfig.SSID = "\"PROVAAP\"";
    netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
    netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
    netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
    netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);    netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
    netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
    netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
    netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);  

    try {
      method.invoke(wifi, netConfig,true);
    } catch (IllegalArgumentException e) {
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    } catch (InvocationTargetException e) {
      e.printStackTrace();
    }
  }
}

動作しますが、現在の構成を自分の構成で変更できず、アクティブな AP の現在の WifiConfiguration を取得すると空の構成になります。なぜですか?

于 2010-08-02T14:53:09.953 に答える
4

これは API 8 以降で動作します。私はこれより下(または上)とは大きく異なるバージョンを使用しており、markov00が遭遇した同じ問題に遭遇していました。ポータブル Wi-Fi AP のデフォルトの WifiConfiguration をロードできません。私は他の場所で解決策を見つけました。

解決策が気に入ったら、これが回答として受け入れられたらいいですね

WifiManager wifi    = (WifiManager) getSystemService(Context.WIFI_SERVICE);
Method[] wmMethods  = wifi.getClass().getDeclaredMethods();

for (Method method: wmMethods){
    if (method.getName().equals("setWifiApEnabled")){
        try {
            // just nullify WifiConfiguration to load the default configuration ;)
            method.invoke(wifi, null, true);
        } catch (IllegalArgumentException e){
            e.printStackTrace();
        } catch (IllegalAccessException e){
            e.printStackTrace();
        } catch (InvocationTargetException e){
            e.printStackTrace();
        }
    }
}
于 2012-07-31T20:17:12.517 に答える
2

WiFi ホットスポットを作成するための API 呼び出しがないようです。申し訳ありません。

于 2010-06-11T14:44:58.463 に答える