导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

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

    H/F/TV Series
    2
    2
    1749
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • D
      dort91011 LV 5 最后由 编辑

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

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

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

      1 条回复 最后回复 回复 引用 分享 0
      • livpo
        livpo LV 6 最后由 编辑

        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 条回复 最后回复 回复 引用 分享 0
        • 1 / 1
        • First post
          Last post

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

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