我使用android studio API 21创建了一个Android应用程序来扫描&连接到BLE设备并订阅以接收广告数据。这很好用,但现在我想自动执行此操作而无需用户手动运行Android应用程序。有没有办法让我的Android设备知道它何时在BLE设备的范围内并自动连接和接收数据(如果可用)?我对广播接收器类中需要什么代码以及广播接收器类是否需要在服务中有点困惑?
答案 0 :(得分:1)
AFAIK,没有这样的系统广播用于通知发现的BLE设备 我想你必须自己做一个服务
要在后台扫描BLE设备,您必须在服务中运行扫描。
您可能需要的几项要求。
在应用启动时启动服务
这是您的服务首次运行的起点。
只需在您的活动onCreate中调用startService。
保持服务正常运行
请参阅how to keep service running
停止蓝牙禁用BLE扫描
在用户禁用蓝牙的同时保持扫描毫无意义
所以,你可能想要这个检查。请参阅detecting bluetooth change
在设备启动时启动服务
请参阅start service at boot
在服务中实施BLE扫描
将扫描活动(或片段)中的所有代码移动到服务。像,
BLEScanningService extends Service {
@Override
public int onStartCommand (Intent intent, int flags, int startId) {
if (/*Bluetooth is available*/) {
/*
Do BLE scan
*/
} else {
// Stop BLE scanning and stop this service
}
}
}
然后,您的BLE扫描服务将始终在后台运行:)
也许您可能还希望从服务中广播一些事件,以便应用UI和通知可以相应地更新。