android8.0获取mac地址,关于Android8.0以下手机获取蓝牙Mac地址的问题和扫描周围的手机蓝牙问题 上篇...

最近在做蓝牙开发,主要就是拿到自己的蓝牙Mac地址,和扫描到周围的蓝牙设备,之前没有接触过蓝牙开发这方面的知识,本以为挺简单的,但是没想到还是遇到了几个比较棘手的问题,写出来和大家分享以下

Android中的蓝牙

说到Android中的蓝牙,大家听到的可能有蓝牙1.0、蓝牙2.0、蓝牙3.0、蓝牙4.0之类的以数字结尾的蓝牙版本号,而实际上,在最新的标准中,已经不再使用数字版本号作为蓝牙版本的区分了,取而代之的是经典蓝牙与低功耗蓝牙(BLE)这两种区别。这里提到的低功耗蓝牙也会有很多人会误解为就是蓝牙4.0,但是完整的蓝牙4.0规范中实际上包括有经典蓝牙和低功耗蓝牙这两个部分

经典蓝牙:蓝牙最初的设计意图,是打电话放音乐。3.0版本以下的蓝牙,都称为“经典蓝牙”。功耗高、传输数据量大、传输距离只有10米。

低功耗蓝牙:就是BLE,通常说的蓝牙4.0(及以上版本)。低功耗,数据量小,距离50米左右。

经典蓝牙:经典蓝牙设备发现其它经典蓝牙设备的方式是调用BluetoothAdapter的startDiscovery()方法。

谷歌的官方api上说的比较模糊,大致是说只能够发现经典蓝牙设备。(巨坑)

BluetoothAdapter adapter = (BluetoothAdapter) getApplicationContext().getSystemService(BLUETOOTH_SERVICE);

//安卓6以后的版本使用此方法拿不到真实的MAC地址

String macAddr = adapter.getAddress();

6.0以上系统(不包含8.1以上的系统)可以通过反射的这种方式拿到Mac

private String getBluetoothMacAddress() {

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

String bluetoothMacAddress = "";

try {

Field mServiceField = bluetoothAdapter.getClass().getDeclaredField("mService");

mServiceField.setAccessible(true);

Object btManagerService = mServiceField.get(bluetoothAdapter);

if (btManagerService != null) {

bluetoothMacAddress = (String) btManagerService.getClass().getMethod("getAddress").invoke(btManagerService);

}

} catch (NoSuchFieldException | NoSuchMethodException | IllegalAccessException | InvocationTargetException ignore) {

}

return bluetoothMacAddress;

}

但是呢8.1或者9.0以上的手机想拿到自己的mac地址怎么办呢

抱着出去看看的态度,详细的去查看了谷歌的官方文档,然后又去Stack Overflow 上去咨询了一些大牛,发现谷歌已经把这种方式给紧掉了,

50faf7a067a11249881ec2917df4df47.png

很无奈,最终也没解决了这个问题,最后采取了一种让用户自己输入自己的MAC地址的方法暂时能用。期待有人能给解决掉这个问题,告诉我一声万分感谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值