Android伴侣设备配对可以在蓝牙连接时从后台唤醒伴侣应用程序吗



我希望我的应用程序在设备找到指定的蓝牙设备时被唤醒。问题是,在安卓O之后,你不能再注册广播接收器来在后台处理它了。有一个固定的前台服务对我来说也是没有选择的。安卓汽车已经做了这种行为,我正在努力实现自己。

我发现:https://developer.android.com/guide/topics/connectivity/companion-device-pairing上面写着

设备配对后,设备可以利用REQUEST_COMPANION_RUN_IN_BACKGROUND和REQUEST_COMPANION_USE_DATA_IN_BACKROUND权限从后台启动应用程序。

遗憾的是,我似乎找不到它是如何使用的,以及它是否提供了我想要的东西。我为所有的建议和暗示感到高兴。

有一个选项可以使用CompanionDeviceManager关联设备,并通过https://developer.android.com/reference/android/companion/CompanionDeviceManager#startObservingDevicePresence(java.lang.String(,然后您将收到来自系统的通知https://developer.android.com/reference/android/companion/CompanionDeviceService#onDeviceAppeared(android.compatible.AssociationInfo(,并在后台执行您的服务。

我最近从这个兔子洞回来了。关于在检测到设备时醒来的文档似乎只是配对文档和CompanionDeviceService类描述末尾的一句话,但从描述来看,这似乎是可能的。

在不同的设备上测试后,它似乎是这样工作的。是的,你可以设置一个CompanionDeviceService,它有一个onDeviceAppared方法,如果检测到你的设备,即使应用程序关闭(但没有关闭或处于Doze模式(,也可以调用该方法。

但是,这是破坏交易的因素。安卓系统不会定期扫描或类似的东西。它只在其他代码启动扫描时调用。这可能是你的应用程序或其他第三方应用程序,但需要启动它。

在禁用了我无关的智能手表应用程序后,我发现我的应用程序停止检测我的蓝牙设备。因此,要么你需要启动扫描,在这种情况下CompanionDeviceService毫无意义,要么你希望其他应用程序启动扫描,这将使你的应用程序不可靠。

最新更新