我正在研究一个在后台运行的Android应用程序,并支持蓝牙配件。我想不断地在后台监听蓝牙设备尝试打开手机的插座。我的问题是,是否有可能实现这一点,而不是始终保持部分唤醒锁,因为这显然会造成严重的电池后果。所以我想知道的是蓝牙在手机上睡着的效果。有一个开放的蓝牙插座时,手机保持清醒状态吗?如果设备尝试连接,蓝牙芯片会自动唤醒Android吗?我试图做一些测试来回答这些问题,但是很难将唤醒锁发生什么情况。此外,我不知道我是否可以依赖我观察到的行为,或者如果它在其他设备上发生变化。Android蓝牙和WakeLock关系
回答
如果有一个开放的蓝牙插座,手机不会保持清醒状态,并且蓝牙芯片在设备尝试连接时也不会唤醒Android。通常有一个后台线程运行来接受打开端口上的连接,一旦设备尝试连接,就是这个线程读取连接,从传入设备获取某种认证(我假设有一个安全协议就绪以接受任何新的传入连接),并且一旦传入连接被验证,创建/通知独立线程以处理与该线程的后续信息交换。
所以后台进程会消耗一些电量和电量,它也负责让Android保持部分清醒状态(部分作为后台进程,并且始终可以控制它检查传入连接的频率)。通常这个后台进程并不总是运行,只有在Android中打开蓝牙时它才会运行。所以你也可以创建一个线程,该线程只有在Android中打开蓝牙时才能运行,否则应该睡眠。
我刚测试过它,似乎在Galaxy Nexus上(作为“服务器”),传入的蓝牙连接确实会唤醒设备。 (发送ICMP Ping到Wifi IP也是如此)。 –
在Nexus 4上它似乎也是这样,但我无法100%确定,因为该设备也喜欢醒来没有明显的原因。至少它总是在需要时醒来。使用Android 2.3.3设备(Galaxy Ace),它会触发双方的可见配对请求,使其无用(因此测试唤醒毫无意义)。 –
是的,如果您的应用程序正在运行并且线程在serverSocket.accept()方法中,则传入的连接会唤醒电话,因此不需要使用唤醒锁。但是,请确保您的服务位于前台并且不会被系统中止。
BLE也是如此。如果您使用autoconnect = true调用connectGatt(),当外设接受连接时,手机将唤醒。不需要唤醒锁。我没有仔细检查这种行为是否会阻止CPU进入深度睡眠状态。 –
只是为了清楚起见,后台服务也可以正常工作,尤其是如果它是STICKY。该设备仍会唤醒。使用前景的原因是为了尽可能地避免因资源不足而被杀害 –
如果您正在开发针对基于棉花糖或以上棉花糖的设备,则可以使用DOZE模式来处理此类情况。然后你不必担心这些事情。它可以用适当的机制处理WAKE_LOCK。
- 1. 蓝牙IOException:蓝牙关闭
- 2. Android Arduino和蓝牙
- 3. Android NDK和蓝牙
- 4. android,UWB和蓝牙
- 5. 打开和关闭蓝牙
- 6. Android蓝牙在关闭时关闭
- 7. UUID蓝牙和Android设备
- 8. Node.js与蓝牙和Android
- 9. 蓝牙,套接字和Android
- 10. Android 6蓝牙
- 11. Android蓝牙
- 12. TimerTask Android蓝牙
- 13. Android蓝牙:IsConnected?
- 14. Android蓝牙PBAP
- 15. Android蓝牙
- 16. android蓝牙
- 17. Android蓝牙:RFCOMM +蓝牙耳机
- 18. Android WakeLock和KeyGuard
- 19. 关于Android上蓝牙的问题
- 20. 蓝牙SPP和其他蓝牙服务
- 21. 蓝牙和Bleno树莓蓝牙外设
- 22. Android蓝牙通知
- 23. Android中的蓝牙
- 24. Android蓝牙传输
- 25. Android环回蓝牙
- 26. Android蓝牙例外
- 27. Android蓝牙配对
- 28. Android开发蓝牙
- 29. Android蓝牙编程
- 30. Android蓝牙例子
您是否在此期间找到答案或任何其他信息?如果是这样,请张贴他们,因为我目前有完全相同的问题。 –
bt连接应该使用比非睡眠设备更多的电池,所以请持有一个唤醒电池,因为您将耗尽电池(但不像无线网络那样糟糕) – NikkyD
是这个BLE 4.x还是普通蓝牙? – zrgiu