如何在Nativescript中获取Mac地址和IP?

时间:2019-02-04 13:20:29

标签: android typescript nativescript

我想从移动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''或其他模块格式。

1 个答案:

答案 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。

因此它似乎并未得到正式支持。