Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    Android10怎么让应用获取到本地蓝牙MAC地址

    H/F/TV Series
    2
    2
    1910
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      dort91011 LV 5 last edited by

      用的Android老版本的方法,就是直接调用安卓框架里的接口来获取蓝牙MAC地址,只能得到一个固定值02:00:00:00:00:00,这是为啥?

         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
         String macAddr = adapter.getAddress();
      

      有没有其它方法可以让应用获取到设备本地的蓝牙MAC地址,现在用的是Android10的系统,H616的板子

      1 Reply Last reply Reply Quote Share 0
      • livpo
        livpo LV 6 last edited by

        Android 10及以上的版本可以试一下这样的方法:

        在AndroidManifest.xml加入如下权限:

            <uses-permission android:name="android.permission.BLUETOOTH" />
            <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
            <uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS" />
        

        并且为系统应用:

        android:sharedUserId="android.uid.system"
        

        然后可以采用反射的方法来获取:

        public static String getBtAddressByReflection() {
                BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
                if (bluetoothAdapter == null) return "";
                Field field = null;
                try {
                    field = BluetoothAdapter.class.getDeclaredField("mService");
                    field.setAccessible(true);
                    Object bluetoothManagerService = field.get(bluetoothAdapter);
                    if (bluetoothManagerService == null) {
                        return "";
                    }
                    Method method = bluetoothManagerService.getClass().getMethod("getAddress");
                    if(method != null) {
                        Object obj = method.invoke(bluetoothManagerService);
                        if(obj != null) {
                            return "/bt_mac:" + obj.toString();
                        }
                    }
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
                return "";
            }
        

        如此便可成功获取到本地蓝牙MAC地址。

        1 Reply Last reply Reply Quote Share 0
        • 1 / 1
        • First post
          Last post

        Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

        行为准则 | 用户协议 | 隐私权政策