获取主机ip android



我试着做作业,但还是做不出来。

我正在制作一个应用程序,将在手机上运行,保持连接到我家的wifi 24/7。我想让它检测主机ip和跟踪任何变化,但我不能让代码工作。我找到了InetAddress类,这似乎是我需要的,但下面的代码抛出了一个通用的异常"坏的东西出错了",我不知道如何把它固定下来,因为它不是未知的hostexception,该方法在文档中抛出:

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型,长度为10位。然而,当我在whatismyip.com上检查时,它们甚至不接近相同。电话的局域网地址是192.168.1.110,我们的外部ip是75.xx.xx。Xxx,返回的整型值是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中的userpermission:

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

最新更新