2017-08-27 88 views
0

我正在使用NativeScript制作应用程序,并且需要获取设备的本地IP地址。 我在,你可以访问本地API的另一页阅读,他们这样做:如何使用NativeScript获取本地IP

var app = require("application"); 
var context = android.content.Context; 
var wifiManager = app.android.context.getSystemService(context.WIFI_SERVICE); 
var wInfo = wifiManager.getConnectionInfo(); 
var ip = wInfo.getIpAddress(); 

我刚开始NativeScript所以我不太了解这意味着什么。

在上面的代码中,IP是251701440,这既不是本地IP也不是公共IP。

有什么办法获得设备的本地IP?

+0

'251701440'是'15.0.168.192' – zerkms

+0

你是如何计算的。此外,它是倒退 – Juanky

+2

在这里你有一个功能转换:https://stackoverflow.com/questions/8105629/ip-addresses-stored-as-int-results-in-overflow – yuriy636

回答

0

要获取Android设备的IP地址,您可以先验证连接类型。如果是WiFi,则可以使用android WiFiManager,并在使用移动数据连接的情况下使用 - java.net.NetworkInterface。

WiFiManager

var context = app.android.context; 
var wifiMgr = context.getSystemService("wifi"); 
var wifiInfo = wifiMgr.getConnectionInfo(); 
var ip = wifiInfo.getIpAddress(); 
var ipAddress = android.text.format.Formatter.formatIpAddress(ip); 
console.log("ip"); 
console.log(ipAddress); 

NetworkInterface的

var en = java.net.NetworkInterface.getNetworkInterfaces(); 
       console.log("NetworkInterface"); 
       console.log(en) 
       for(var obj in en){ 
        var intf = en.nextElement(); 
        var enumIpAddr = intf.getInetAddresses(); 
        console.log("enumIpAddr"); 
        for(var obj2 in enumIpAddr){ 
         console.log("obj"); 
         if(enumIpAddr.hasMoreElements()){ 
          var inetAddress = enumIpAddr.nextElement(); 
          if ((!inetAddress.isLoopbackAddress()) && (inetAddress instanceof java.net.Inet4Address)) { 
            console.log("return inetAddress.getHostAddress(): "+inetAddress.getHostAddress()); 
          } 
         } 
        } 
       } 

与NetworkInterface的第二种方法是不完全测试,可能与地址返回的一些问题。