首页 > 解决方案 > 如何在 Nativescript 中获取 mac 地址和 ip?

问题描述

我想从我的移动 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。

你能问我任何想法吗?

更新:

我遵循这个。我有这个代码:

步骤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 ns from "mod"'、'import {a} from "mod"'、'import d from "mod"' 或其他模块格式。

标签: androidtypescriptnativescript

解决方案


您应该具有捕获 IP 地址的ACCESS_WIFI_STATE权限AndroidManifest.xml

<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.

关于 Mac 地址,Android 6.0 起

为了给用户提供更好的数据保护,从这个版本开始,Android 移除了对使用 Wi-Fi 和蓝牙 API 的应用程序的设备本地硬件标识符的编程访问。WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法现在返回 02:00:00:00:00:00 的常量值。

所以它似乎没有得到官方的支持。


推荐阅读