我正在开发Sony SmartWatch 2的控制扩展,需要在SW2显示器上更新 TextView 每秒。
如果我的智能手机通过USB连接,或者当我的智能手机屏幕处于活动状态时USB断开连接,则控制扩展按照预期在SmartWatch 2上正常工作。
但很快我的SmartPhone屏幕空闲,控件扩展会停止常规的TextView更新。首先开始打破并最终陷入困境。主机应用程序未关闭扩展,SW2继续与智能手机配对。事实上,如果我触摸显示屏,扩展程序似乎可以通过一些TextView更新恢复状态一段时间,但会快速中断并再次卡住。
同时,如果我打开智能手机屏幕,控制扩展程序将恢复状态并恢复正常的TextView更新。
似乎当智能手机闲置时,它停止将常规蓝牙消息发送到SW2。我已经尝试了许多解决方案来避免这种行为,甚至将keepRunningWhenConnected设置为true。但这种行为总是一样的。
是否还有人遇到此问题或有解决方案的线索?
谢谢:)
答案 0 :(得分:1)
您使用的是什么型号的手机?
如果确实蓝牙连接不存在,那么您可以尝试以下可能的解决方案:
答案 1 :(得分:0)
确定。在测试和测试了几个解决方案(AlarmManager,BluetoothAdapter等等)之后,我得出了以下结论:
它不是丢失的蓝牙连接,否则SmartWatch 2将失去与智能手机的连接,并且永远不会发生。实际上是ControlExtension丢失的Phone CPU,因为当智能手机闲置时CPU也会空闲。通过丢失Phone CPU,ControlExtension无法处理“sendText(...)”调用,这意味着使用蓝牙消息的相应上层调用“sendHostApp(...)”也从未调用过,这就是为什么TextView是未在SmartWatch 2上更新。
此外,我认为当我触摸SmartWatch 2屏幕时,会触发硬件中断,唤醒手机CPU短时间以响应SmartWatch 2触摸事件,这就是为什么当我触摸SW2屏幕时TextView会更新再次卡住之前几次。
这适用于仅显示静态内容和/或回复用户(触摸,滑动等)事件的静态控制扩展应用程序。但对于Control Extensions应用程序来说,这是一个彻底的灾难,无论用户直接交互如何,都需要进行一些处理。
我从来没有用过这个术语,因为我认为SmartConnect主机应用程序的工作是保证手机CPU到Control Extensions。
因此,某些应用程序的解决方案可能是使用AlartManager来安排唤醒呼叫以进行一些处理。对于其他应用程序,解决方案可能是PowerManger并使用wakelock.aquire()/ wakelock.release()。