Android10怎么让应用获取到本地蓝牙MAC地址
-
用的Android老版本的方法,就是直接调用安卓框架里的接口来获取蓝牙MAC地址,只能得到一个固定值02:00:00:00:00:00,这是为啥?
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); String macAddr = adapter.getAddress();
有没有其它方法可以让应用获取到设备本地的蓝牙MAC地址,现在用的是Android10的系统,H616的板子
-
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地址。
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号