簡體   English   中英

獲取主機ip android

[英]Get host ip android

試圖做我的作業,但無法弄清楚。

我正在制作一個可以在與我的家庭wifi 24/7保持連接的電話上運行的應用程序。 我希望它檢測主機IP並跟蹤任何更改,但是我無法使代碼正常工作。 我找到了InetAddress類,這似乎是我所需要的,但是下面的代碼引發了一個通用異常“事情不好了”,我不知道如何固定它,因為它不是方法拋出的UnknownHostException。文檔:

public void getIP(View view) {
    isNetOK();
    getLocalIpAddress();

}

public void isNetOK() {
    //get connectivity manager
            connMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            //call getActiveNetworkInfo method of connMan, returns a networkInfo object
            NetworkInfo netInfo = connMan.getActiveNetworkInfo();
            if (netInfo !=null && netInfo.isConnected()) {
                setViewText("net_stat", "Network Connected"); 
                netOK = true;
            } else {
                setViewText("net_stat", "Network Unavailable");
            }
}

public void getLocalIpAddress() {
     isNetOK();
     if (netOK) {

         try{

          InetAddress ownIP = InetAddress.getLocalHost();
          localIP = ownIP.toString();
          }catch (UnknownHostException e){
          setViewText("ip_view", "Error: unknown host");
          } catch (Exception ex) {
              setViewText("ip_view", "Something bad is going wrong");
          }

     }

isNetOK可以正常工作,我已經將它單獨命名了一天左右。

有人可以指出為什么該代碼不起作用的方法嗎? 這是最好的方法嗎? 我的目標是將家中的服務器與我在GoDaddy獲得的域名鏈接起來。 我的ip地址是動態的,但每隔幾個月或停電時才更改。 我想要一個可以不時檢查一次IP(6小時?)的應用程序,並通知我它是否更改,以便我可以更新DNS。 我知道,駭客,緩慢等等,但實際上它只是供私人使用,看看我是否可以使它工作。

編輯1

我在下面的budcopter答案中嘗試了該方法,最后得到了一些進行一些更改的代碼:

    public void getLocalIpAddress() {
     if (netOK) {
         try{
             WifiManager WiMan = (WifiManager) getSystemService(Context.WIFI_SERVICE);
             WifiInfo wifiInfo = WiMan.getConnectionInfo();
             int address = wifiInfo.getIpAddress();
             String ipAddress = (String) Integer.toString(address);
             setViewText("ip_view", ipAddress);
          } /*catch (UnknownHostException e){
              setViewText("ip_view", "Error: unknown host");
          } */catch (Exception ex) {
              setViewText("ip_view", "Something bad is going wrong");
          }
     }

這將返回一個有效的int,十位數字長。 但是,當我與whatismyip.com進行核對時,它們甚至差一點也不相同。 手機的LAN地址是192.168.1.110,我們的外部IP是75.xx.xx.xxx,返回的int是1812048064。即使我關閉WiFi無線電的電源,它也會返回相同的數字。 知道WifiManager系統服務給我多少電話嗎?

另外,如果禁用了WiFi,我將添加一項檢查以防止請求地址,但這在當時是微不足道的。

嘗試這個:

 public void getLocalIpAddress() {
 // remove it, duplicated call
 // isNetOK();
 if (netOK) {

     try{
         WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
         int address = info.getIpAddress();

         String ipAddress = Formatter.formatIpAddress(address);
         setViewText("ip_view", ipAddress);
      } catch (UnknownHostException e){
          setViewText("ip_view", "Error: unknown host");
      } catch (Exception ex) {
          setViewText("ip_view", "Something bad is going wrong");
      }

 }

並且不要忘記androidmainfest.xml中的userpermisson:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM