最近在做H5的一个项目,有一个需求是使用H5来获取手机的IP地址,如果不在一个网段就跳转到APN设置界面
让用户手动设置;js代码如下所示:
// 全局抽取出来获取设备当前IP地址
function getIp() {
var ip = “127.0.0.1”;
var Context = plus.android.importClass(“android.content.Context”);
if (plus.os.name == “Android”) {
//WifiManager
var Context = plus.android.importClass(“android.content.Context”);
var WifiManager = plus.android.importClass(“android.net.wifi.WifiManager”);
var wifiManager = plus.android.runtimeMainActivity().getSystemService(Context.WIFI_SERVICE);
var WifiInfo = plus.android.importClass(“android.net.wifi.WifiInfo”);
if (!wifiManager.isWifiEnabled()) { //未连接wifi
var Enumeration = plus.android.importClass(“java.util.Enumeration”);
var NetworkInterface = plus.android.importClass(“java.net.NetworkInterface”);
var Inet4Address = plus.android.importClass(“java.net.Inet4Address”);
var en = NetworkInterface.getNetworkInterfaces();
while (plus.android.invoke(en, “hasMoreElements”)) {
var ni = plus.android.invoke(en, “nextElement”);
var interfaceName = ni.getDisplayName();
//console.log(“tag”, “网络名字” + interfaceName);
var enumIpAddr = plus.android.invoke(ni, “getInetAddresses”)
while (plus.android.invoke(enumIpAddr, “hasMoreElements”)) {
var inetAddress = plus.android.invoke(enumIpAddr, “nextElement”);
if (!plus.android.invoke(inetAddress, “isLoopbackAddress”) && inetAddress instanceof Inet4Address) {
ip = plus.android.invoke(inetAddress, “getHostAddress”);
return ip;
}
}
}
} else { //连接wifi
var wifiInfo = wifiManager.getConnectionInfo();
ip = intToIp(wifiInfo.getIpAddress());
var wifiInfo = wifiManager.getConnectionInfo();
var ipAddress = wifiInfo.getIpAddress();
ip = intToIp(ipAddress);
}
}
return ip;
}
function intToIp(i) {
return (i & 0xFF) + “.” + ((i >> 8) & 0xFF) + “.” + ((i >> 16) & 0xFF) + “.” + ((i >> 24) & 0xFF);
}
// 如果IP地址不在特定网段内,跳转到APN设置界面,让用户手动设置
function settingAPN() {
if (mui.os.ios) {
plus.runtime.launchApplication({
action: ‘prefs:root=MOBILE_DATA_SETTINGS_ID’
}, function(e) {}); //WIFI
} else {
// alert(getIp());
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass(“android.content.Intent”);
var mIntent = new Intent(‘android.settings.APN_SETTINGS’);
main.startActivity(mIntent);
}
}
***********************************分割线*************************************
如果需要判断IP地址在某个网段范围的时候可以把获取的IP地址转换为数组,然后判断范围:
//这里多加一个判断
var currentIpArray = new Array();
//这里的IP就是获取到的IP地址
var getCurrentIp = ip;
currentIpArray = getCurrentIp.split(“.”);
// alert(currentIpArray[0]);
var firstNumber = currentIpArray[0];
var secondNumber = currentIpArray[1];
//这里对获取到的IP地址尽心判断
if (firstNumber == 192 && secondNumber >= 168 && secondNumber <= 189) {
//alert(“firstNumber”+firstNumber+”secondNumber”+secondNumber);
return true;
} else {
return false;
}