Android 8.1 Wi-Fi, BT, Ethernet MAC地址获取限制及解决方案
122 浏览量
更新于2024-08-29
收藏 188KB PDF 举报
本文主要讨论了在Android 8.1系统环境下,如何获取Wi-Fi、蓝牙(Bluetooth)和以太网(Ethernet)的MAC地址的问题,并且针对代码示例中遇到的异常行为进行了深入分析。
首先,作者提供了一个简单的Java方法`getWifiMac()`,用于在Android设备上获取Wi-Fi的MAC地址。在Android 5.1版本中,这段代码能正常运行并返回Wi-Fi接口的MAC地址。然而,在升级到Android 8.1时,发现代码返回的是固定的地址02:00:00:00:00:00。这可能是由于Android系统的新安全策略,即出于隐私保护考虑,限制了第三方应用直接访问设备的MAC地址。
在进一步的研究中,作者查看了相关的Android源码。在`WifiManager`类的`getConnectionInfo()`方法中,发现调用的是`mService.getConnectionInfo(getContext().getOpPackageName())`,这个函数实际上将请求转发给了系统的无线网络服务(WiFiServiceImpl)。在`WifiServiceImpl`类的`getConnectionInfo(String callingPackage)`方法中,执行了权限检查`enforceAccessPermission()`,确保只有经过授权的应用才能访问Wi-Fi信息。
在Android 8.1及以后的版本中,开发者需要特别注意,由于数据隐私和安全性的增强,系统可能会对敏感数据的访问进行严格的控制。获取Wi-Fi、蓝牙或以太网的MAC地址这样的操作,如果没有正确处理权限或者适配新的API,可能会导致应用无法得到期望的结果,或者在用户不知情的情况下暴露用户信息。
对于获取蓝牙和以太网MAC地址的问题,文章没有给出具体的代码示例,但可以推测,类似Wi-Fi的情况可能也会存在,因为这些网络接口的管理同样受到系统的权限管理和数据保护。开发者需要查阅相关文档,了解新版本的Android API,比如`bluetoothAdapter.getAddress()`(蓝牙)和`InetAddress`(以太网)等,来获取这些信息,并确保在调用时正确处理权限和可能出现的异常。
总结来说,本文讨论了Android 8.1中关于网络接口MAC地址获取的权限限制,以及开发者如何应对这种变化,通过源码分析和API查阅来确保应用在不同版本系统中的兼容性和安全性。对于开发人员来说,理解并遵循这些规则是关键,以便在维护和开发过程中避免不必要的问题。
2663 浏览量
165 浏览量
170 浏览量
419 浏览量
1191 浏览量
weixin_38711041
- 粉丝: 6
- 资源: 954
最新资源
- rabbitmq3.8.9&otp21.3配套版本)
- taskcat:测试所有CloudFormation内容! (使用TaskCat)
- 傅里叶级数:可以找到一个函数的傅里叶级数-matlab开发
- TripPlanner:首次测试
- WebSocket-Chatroom:使用gorilla,nhooyr.io包实作WebSocket聊天室
- STM32F4xx中文参考手册(1).zip
- prosper-loan-dataset-findings:该数据集包含113,937笔贷款,每笔贷款有81个变量,包括贷款金额,借款人利率(或利率),当前贷款状态,借款人收入以及许多其他变量
- ChipGenius芯片精灵V4.00 --U盘芯片检测工具
- eSmithCh_V5_14:交互式史密斯圆图,绘制必要的线条来解决传输线或电子耦合问题。尝试并享受它-matlab开发
- 行业-2020年AI新基建白皮书.rar
- jQuery数字滚动累加动画插件
- 码头工人注册表
- 学历教育财务管理 宏达学历教育报名财务管理系统 v1.0
- datastructure_exercise
- github-file-icons::card_index_dividers:一个浏览器扩展,为GitHub,GitLab,gitea和gogs提供了不同的文件类型不同的图标
- Multiple-markers-on-google-maps