NJS如何获取安卓手机MAC地址 安卓版本8.0以上

问题描述

我现在用H5+MUI+vue开发 官网给的获取MAC地址都不好用 要不是报错 要不就是02:00:00:00:00 这种根本不是实际地址所以想问问大神应该怎么获取 对NJS不是很了解查询不到

问题出现的环境背景及自己尝试过哪些方法

全尝试过了

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

 function getMac() {
        var Context = plus.android.importClass("android.content.Context");
        var wifiManager = plus.android.runtimeMainActivity().getSystemService(Context.WIFI_SERVICE);
        var wifiInfo = plus.android.invoke(wifiManager, "getConnectionInfo");
        var mac = plus.android.invoke(wifiInfo, "getMacAddress");
        alert(mac);//02:00:00:00:00

    }

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 4.3k
2 个回答
function getMac() {
    var mac = "xxx-xxx-xxx-xxx";
    if (plus.os.name == "Android") {
    //WifiManager
        var Context = plus.android.importClass("android.content.Context");
        var WifiManager = plus.android.importClass("android.net.wifi.WifiManager");
        var wifiManager = plus.android.runtimeMainActivity().getSystemService(Context.WIFI_SERVICE);
        var WifiInfo = plus.android.importClass("android.net.wifi.WifiInfo");
        var wifiInfo = wifiManager.getConnectionInfo();
        mac = wifiInfo.getMacAddress();
    }
    return mac;
}

代码没问题, 应该是系统限制了

硬件标识符访问权
为给用户提供更严格的数据保护,从此版本开始,对于使用 WLAN API 和 Bluetooth API 的应用,Android 移除了对设备本地硬件标识符的编程访问权。WifiInfo.getMacAddress() 方法和 BluetoothAdapter.getAddress() 方法现在会返回常量值 02:00:00:00:00:00。

Android 6.0 变更

7.0 以后貌似又放开了, 看到一个方案(没测试).

DeviceAdminReceiver admin = new DeviceAdminReceiver();
DevicePolicyManager devicepolicymanager = admin.getManager(getApplicationContext());
ComponentName name1 = admin.getWho(getApplicationContext());
if (devicepolicymanager.isAdminActive(name1)){
            String mac_address = devicepolicymanager.getWifiMacAddress(name1);
            Log.e("macAddress",""+mac_address);
}

就是说, 不是Android 8的问题, Android 6.0 就改了. 旧的代码不能用, 新的代码在7.0以后可以试一下.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题