在Android中获取蓝牙适配器的MAC地址

7

我想获取我Android设备上蓝牙的MAC地址,因此我正在使用以下方法:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String macAddress = mBluetoothAdapter.getAddress();

返回结果:

返回的地址是 02:00:00:00:00:00。我看到有些问题和帖子说,除非您的应用程序是系统应用程序,否则在安卓系统中获取MAC地址不再可能。

那如果我真的需要获取手机的MAC地址怎么办?难道就完全不可能了吗?

注意:我知道这个问题在SO上被问过很多次,但大多数答案都已经过时了。

3个回答

6

出于安全原因,自Android 6.0版本以来,此功能在Android上不可用 [来源]

为了为用户提供更高的数据保护,从此版本开始,Android取消了使用Wi-Fi和蓝牙API的应用程序对设备本地硬件标识符进行编程访问的权限。WifiInfo.getMacAddress() 和BluetoothAdapter.getAddress()方法现在返回常量02:00:00:00:00:00。

这样做是为了防止随机应用程序获取关于手机硬件地址的信息,从而侵犯隐私/数据保护。

希望这可以帮到你。


那么如果有人需要MAC地址呢?这是不可能的吗?没有解决方法吗? - Mohamad Mousheimish
是的,这是因为它可能成为攻击向量而被禁止了。我能想到的唯一解决方法是将您的操作系统降级至 Android v6.0 之前的版本。您为什么需要您的 MAC 地址?也许有另一种方法可以实现您想要的目标,而无需访问 MAC 地址。 - Youssif Saeed
1
假设我有一部带有MAC地址X的手机,还有另一个附近设备带有MAC地址B。当两个设备彼此靠近时,我能够使用BluetoothDeviceScanResult.getDevice()中的getAddress()方法获取到另一个设备的MAC地址。因此,我仍然需要捕获自己设备的MAC地址,以便在后端中保存每个用户和其MAC地址,并在通过蓝牙捕获它时知道谁在我附近。我真的不知道是否表达清楚了,有点复杂,对于这个长评论很抱歉。 - Mohamad Mousheimish
我认为我理解了你的应用,但是正如你所想象的那样,这对于谷歌来说是不可取的,因为你的应用程序将知道任何接近你的用户的位置,从而侵犯他们的隐私。请看一下这篇文章,它解释了与你的想法有些相似的东西及其挑战:- https://wyldnetworks.com/wyld-mesh-covid-19-proximity-contact-tracing/ - Youssif Saeed
除了指纹识别设备进行访问控制,还有其他方法吗? - TheRealChx101
这个“安全性”是否也适用于公司管理的设备(工作配置文件等)?我找不到任何证实它不适用的确认,如果是这样,谷歌再次对企业用户摆出了鄙视的态度。在这里,我们处于完全管理的工作环境中,试图在屏幕上显示蓝牙配对条形码,以便将手机与支持此类型配对的无线条形码扫描仪配对。我们需要将手机的蓝牙地址编码到条形码中... - GSerg

2

在另一个答案中,Youssif Saeed 所说的是正确的。Android不再允许我们获取MAC地址。

关于我想要的简要描述:

假设我有一部带有MAC地址X的手机,我还有另一个附近的设备,它的MAC地址为B。当这两个设备靠近时,我可以使用BluetoothDevice和ScanResult.getDevice()中的getAddress()方法来获取另一个设备的MAC地址。所以我仍然需要捕获自己设备的MAC地址,以便在后端中保存每个用户及其MAC地址,并在蓝牙中捕获它时,我知道谁在我附近。

这是我为了在附近设备之间发送一些数据而做出的解决方案。

我发现了一些称为Nearby Messages API的东西。它适用于Android和iOS,并且非常容易实现。现在我能够捕获安装了我的应用程序的附近设备,并发送由应用程序生成的唯一ID以识别用户。


0

我在我的设备上找到了蓝牙和WiFi MAC的解决方案。 有些属性是不隐藏的。 如果您在应用程序内部的未root的shell上运行getprop命令,您可能会发现这些只读属性:

persist.odm.wifimac: [xx:xx:xx:xx:xx:xx]

persist.odm.bt.address: [xx:xx:xx:xx:xx:xx]

对于我的应用程序,我运行此命令以获取蓝牙MAC地址,然后从datainputstream中读取内容以获取MAC地址。

getprop persist.odm.bt.address


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接