如何在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
SharedPreferencesfor persistent use
- Android ID: Retrieve via
- WiFi State: Some devices won't return a MAC address if WiFi is disabled. You can optionally enable WiFi temporarily (with the
CHANGE_WIFI_STATEpermission), but this might disrupt the user's settings.
内容的提问来源于stack exchange,提问作者Marco Zanaboni
相关产品推荐
相关产品推荐

