我正在使用NativeScript创建应用,我需要获取设备的本地IP地址。 我在另一个页面中读到您可以访问本机API,他们这样做了:
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 :(得分: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的第二种方法尚未经过全面测试,可能会在返回地址时出现问题。