我想从移动Android获取IP地址。
var context = application.android.context;
var wifiMgr = context.getSystemService("wifi");
var wifiInfo = wifiMgr.getConnectionInfo();
var ip = wifiInfo.getIpAddress();
console.log('ip', ip)
结果是:JS: ip -2029999936
但是实际上这不是我的IP。
你能问我任何想法吗?
更新:
我关注this。我有以下代码:
步骤1。在我的组件中添加以下代码:
import app = require("application");
app.android.context;
constructor() {
var context = android.content.Context;
var wifiManager = app.android.context.getSystemService(context.WIFI_SERVICE);
var wInfo = wifiManager.getConnectionInfo();
var mac = wInfo.getMacAddress();
}
步骤2。 在AndroidManifest.xml中添加
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
错误:[ts]找不到名称“ android”。 [2304]这一行:var context = android.content.Context; 错误TS1202:定位ECMAScript模块时,不能使用导入分配。考虑使用'import * as from'mod''的ns,'import {a} from'mod'','import d from'mod''或其他模块格式。
答案 0 :(得分:0)
您应该在ACCESS_WIFI_STATE
中拥有AndroidManifest.xml
的权限才能捕获IP地址。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
那么您所要做的就是
import * as application from 'tns-core-modules/application';
declare var android;
const wifiManager = application.android.context.getSystemService(android.content.Context.WIFI_SERVICE);
const connectionInfo = wifiManager.getConnectionInfo();
const ip = android.text.format.Formatter.formatIpAddress(connectionInfo.getIpAddress());
declare var android;
是为了避免在访问本机api时出现TS错误。一种替代方法是安装tns-platform-declarations
插件并将声明文件指向您的references.d.ts
。
Regarding the Mac Address, since Android 6.0
为了向用户提供更大的数据保护,从此版本开始,Android删除了使用Wi-Fi和Bluetooth API对应用的设备本地硬件标识符的编程访问。 WifiInfo.getMacAddress()和BluetoothAdapter.getAddress()方法现在返回常数值02:00:00:00:00:00。
因此它似乎并未得到正式支持。