18

このjava.net.InetAddress.GetByName(String host)メソッドはレコードのみを返すことができるので、ライブラリAを使用して DNS クエリを送信できるようにする必要がある他のレコード タイプを検索します。dnsjava

ただし、これは通常、DNS サーバーのアドレスを見つけるために解析または同様のことができることに依存しており/etc/resolv.conf、Android では機能しません。

getpropAndroid の現在の DNS 設定は、コマンドを使用してシェル内からのみ取得できるようです。

Runtime.exec()でシェルを生成してからの出力を解析する以外に、Java からこれらの設定を取得する方法を誰か教えてもらえますgetpropか?

4

4 に答える 4

5

一般的なケースでは無理だと思います。WiFiの場合、私はこれを見つけました:

WiFiManager wifi = (WifiManager) getSystemService(WIFI_SERVICE); 
DhcpInfo info = wifi.getDhcpInfo(); 
于 2008-12-22T08:50:29.500 に答える
2

Androidシステムのシステムプロパティを取得するには、このクラスの静的メソッド(android.os.SystemProperties)を使用できます。オープンAPIではないため、SDKに対してコンパイルすることはできません。これを行うには回避策が必要です。たとえば、AOSPからコードをコピーして、コンパイルを実行します。このクラスは内部使用のためのものであるため、自己責任で行ってください。楽しむ。

于 2012-04-18T12:16:44.040 に答える
1

接続しているネットワーク (wifi またはイーサネット) に関係なく、DNS アドレスを見つけることができるはずです。これが私のプログラムです。

AndroidManifest.xmlファイル

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

あなたのコード:

    ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Service.CONNECTIVITY_SERVICE);

                /* you can print your active network via using below */
                Log.i("myNetworkType: ", connectivityManager.getActiveNetworkInfo().getTypeName());
                WifiManager wifiManager= (WifiManager) getApplicationContext().getSystemService(getApplicationContext().WIFI_SERVICE);


                Log.i("routes ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getRoutes().toString());
                Log.i("domains ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDomains().toString());
                Log.i("ip address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getLinkAddresses().toString());
                Log.i("dns address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDnsServers().toString());



                if(connectivityManager.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI) {
                    Log.i("myType ", "wifi");
                    DhcpInfo d =wifiManager.getDhcpInfo();
                    Log.i("info", d.toString()+"");
                }
                else if(connectivityManager.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_ETHERNET) {
/* there is no EthernetManager class, there is only WifiManager. so, I used this below trick to get my IP range, dns, gateway address etc */

                    Log.i("myType ", "Ethernet");
                    Log.i("routes ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getRoutes().toString());
                    Log.i("domains ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDomains().toString());
                    Log.i("ip address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getLinkAddresses().toString());
                    Log.i("dns address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDnsServers().toString());

                }
                else {

                }

出力 ここに画像の説明を入力

WifiManagerWi-Fi のみを使用して Wi-Fi 経由で接続されているのか、ネットワーク経由で接続されているのかを知ることはできませんWifiManager。を使用する必要がありますConnectivityManager。マージした場所でコードを再度更新し、WifiManager必要ConnectivityManagerな結果を生成しました。

于 2017-09-22T16:11:12.610 に答える