2017-08-27 92 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的第二種方法是不完全測試,可能與地址返回的一些問題。