7

私は 1 つのプロジェクトに取り組んでおり、Wifiユーザーが必要に応じて静的 IP アドレス (DNS、ネットマスク、ゲートウェイ) を設定する機能が必要です。

私の最初の実際の解決策は、android.provider.Settings.Systemこの機能を許可するクラスの使用ですが、この解決策は Android 2.x デバイスでのみ正常に機能します。

それはいいことです、間違いなく私は完全にゼロではありませんが、Android OSのより高いバージョンでも動作するようになるといいでしょう. なぜ機能しないのか、正確にはわかりません。

実際のステータスを確認するためにこの簡単な方法を使用する場合:

public static final boolean hasStaticIp(Context c) {
    try {
        return Settings.System.getInt(c.getContentResolver(), 
                                        Settings.System.WIFI_USE_STATIC_IP) == 1;
    }
    catch (SettingNotFoundException e) {
        Log.i(TAG, "Settings not found (" + e.geMessage() + ")");
        return false;
    }
}

Android 2.x と Android 4.x の両方で true を返しますが、2 番目のケースでは、変更は確実に反映されWifiませ

同じ問題に直面した人はいますか?

携帯電話がルート化されているかどうかのステータスを簡単に確認できるため、動作するソリューションとルート化されたデバイス(Linuxのコマンドなど)に満足しています。

前もって感謝します。

4

1 に答える 1

10

今、私は言うことができます:「私はそれを捕まえた」

私は、リフレクションを使用した実際の(現在は1つのソリューションしかないと思います)ソリューションがどれほど実際的であるか、より良く、よりクリーンで、100%機能するソリューションを探すことに何日も費やしました。しかし、結果なし。

そこで、ここでリフレクションを使用して前述のソリューションを使用しようとしました:

そして驚くべきことにそれは機能します!そして今、私は何が欠けていたかを知っています。そのため、 10APIを超えるデバイス (Sice Honeycomb) でこのソリューションを試したすべての人は、次のように電話したことを確認してください。

wifiManager.saveConfiguration();

呼ぶだけじゃ物足りない

wifiManager.updateNetwork(wifiConfiguration);

変更 (リフレクションによっても行われる) は、特定のWifiConfigurationに永続的に保存されないためです。

これで期待どおりに動作するようになりました。

Android 1.x および 2.x の静的 IP アドレスの設定:

Android 1.x および 2.x は、SSID ごとに静的 IP アドレスを設定するためのソリューションを提供していません (実際に接続されているネットワークのみ)。そのため、単純な実用的なソリューションは、ContentResolverを使用して、次の方法でシステム設定にデータを書き込むことです。

Settings.System.putInt(resolver, "wifi_use_static_ip", 1); // enabling static ip
Settings.System.putInt(resolver, "wifi_use_static_ip", 0); // enabling DHCP

Android 3.x および 4.x の静的 IP アドレスの設定:

Android 3.x 以降、SSID ごとに静的 IP アドレスを設定できるため、Android OS の下位バージョンのソリューションは機能しません。

現在API、この目的には対応していないため、上記でリンクされたリフレクションを使用したソリューションは、実際に機能するソリューションの 1 つにすぎません。

ノート:

setGateway()Android 3.x 用に変更することを忘れないでください(元のスレッドにも記載されています)。

最後に、Android 3.x および 4.x の静的 IP アドレスを設定するためのアプリケーションが必要な場合、適切な方法は完全なネットマスクではなくintとしてネットマスク プレフィックスを使用するため、使用可能なネットマスクとそのプレフィックスのリストを次に示します。

それが役に立てば幸い。

于 2013-08-16T08:40:26.083 に答える