【发布时间】:2018-12-26 16:28:39
【问题描述】:
问题陈述
我正在尝试为 Android 制作一个可以检测附近智能手机设备的应用程序。我需要发现智能手机设备,无论它们是否连接到 WLAN 或操作系统。唯一的要求是启用他们的蓝牙或 wifi 设置。我正在尝试捕获这些设备的 MAC 地址和 RSSI。我试图模拟的应用程序示例是Meshlium。
已经考虑过的方法
-
Android Classic Bluetooth:
- 我已按照指南查找当前未与我的设备配对的设备。
- 我试图发现的智能手机需要处于“发现”模式才能被发现。对于大多数现代手机来说,这意味着它们需要在蓝牙设置页面上。
-
Android P2P (Wifi Direct):
- 我再次按照指南进行操作,找不到附近的智能手机。
- 与蓝牙类似,两个设备(我的设备和我要查找的设备)都需要尝试发现 wifi 直连设备。
- 另外,iOS 似乎也不支持 wifi direct。
-
Google Nearby:
- Nearby Connections 仅适用于运行正在使用附近连接 api 的应用程序的设备。因此,只有安装了当前运行广告或发现功能的应用的设备才能进行检测。
-
Wifi Network Service Discovery:
- 这让我可以看到当前在网络上宣传服务的设备,而不是实际的设备本身。
设备规格
我使用的设备运行的是 android 版本 6.0.1,型号为 rk3368-box。该设备还具有root权限。
问题
有没有办法在我的安卓设备上发现附近的智能手机,唯一的要求是启用他们的 wifi 或蓝牙?也许数据包嗅探设备的probe requests?我研究过数据包嗅探,但找不到任何适用于 Android 的可靠资源。如果可能的话,我也希望能够在 c# 和 Xamarin.Android 中这样做。
更新
是否可以选择自定义 ROM?我不想为游戏商店制作应用程序,而是为定制硬件制作应用程序。也许当我在设备上启用 wifi 热点时,它会记录附近设备的探测请求并保存为文件以供以后导出?
【问题讨论】:
-
还意识到
Meshlium有一个硬件组件,它将他们的解决方案置于基于标准 Android 硬件/操作系统的纯软件 Android 应用程序之外。 -
@MorrisonChang 请看我上面的更新。我正在寻找定制硬件的开发,所以定制 ROM 是可能的。那能提供解决方案吗?
-
如果您不习惯构建自定义 ROM 或逆向工程驱动程序软件,我认为您不了解项目的规模。如果您已经拥有现有的检测硬件,那么您的问题就变成了 Android 应用程序如何与设备通信,即 Android Open Accessory 协议或其他 USB 连接。如果您没有此类检测硬件,则需要构建它,我建议跳过 Android 并坚持使用基于 RaspberryPi/Linux 的解决方案 - 并查看“黑帽”研究人员为实现类似目标所做的工作。祝你好运。
标签: c# android xamarin.android network-programming android-source