You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android 8的NativeScript/TypeScript项目中获取MAC地址?

Fetch MAC Address in NativeScript/TypeScript (Android)

Got it, since you couldn't find a suitable plugin to fetch the MAC address in your NativeScript/TypeScript Android project, let's build this using Android's native APIs directly. Here's a complete solution that handles different Android versions:

Step 1: Add Required Permissions

First, add the necessary permission to your App_Resources/Android/src/main/AndroidManifest.xml file. This lets your app access WiFi state information:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Optional: Add this if you want to enable WiFi programmatically (if it's off) -->
<!-- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> -->

Step 2: TypeScript Implementation

Create a utility function (you can put this in a helper file like utils/mac-address.ts) that interacts with Android's native WifiManager:

import { isAndroid, Application } from "@nativescript/core";

export function getDeviceMacAddress(): string {
    // Only run this logic on Android
    if (!isAndroid) {
        return "This feature is only available on Android devices";
    }

    const Context = android.content.Context;
    const wifiManager = Application.android.context.getSystemService(Context.WIFI_SERVICE) as android.net.wifi.WifiManager;

    // Check if WiFi is enabled (some devices won't return MAC if WiFi is off)
    if (!wifiManager.isWifiEnabled()) {
        // Optional: Uncomment below to enable WiFi temporarily (requires CHANGE_WIFI_STATE permission)
        // wifiManager.setWifiEnabled(true);
        return "WiFi is disabled - cannot retrieve MAC address";
    }

    const wifiInfo = wifiManager.getConnectionInfo();
    let macAddress = wifiInfo.getMacAddress();

    // Handle Android 10+ restriction (API level 29+)
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
        // On Android 10+, real MAC address is hidden by the system
        macAddress = macAddress || "02:00:00:00:00:00";
        console.warn("Android 10+ restriction: Cannot access real WiFi MAC address");
    }

    return macAddress || "MAC address not available";
}

How to Use It

Call the function anywhere in your app, like in a component or service:

import { getDeviceMacAddress } from "./utils/mac-address";

// Example usage
const mac = getDeviceMacAddress();
console.log("Device MAC Address:", mac);

Key Notes

  • Android 10+ Limitation: Starting with Android 10, Google restricted access to the real WiFi MAC address. The system will return a generic placeholder (02:00:00:00:00:00) instead. If you need a unique device identifier, consider alternatives like:
    • Android ID: Retrieve via android.provider.Settings.Secure.getString(Application.android.contentResolver, android.provider.Settings.Secure.ANDROID_ID) (note: this resets on factory reset)
    • Custom UUID: Generate a unique ID once and store it in SharedPreferences for persistent use
  • WiFi State: Some devices won't return a MAC address if WiFi is disabled. You can optionally enable WiFi temporarily (with the CHANGE_WIFI_STATE permission), but this might disrupt the user's settings.

内容的提问来源于stack exchange,提问作者Marco Zanaboni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:13:08