我正在编写包含两个元素的简单应用程序 - 服务和活动.活动仅用于启动和停止服务.服务用于PhoneStateListener获取有关当前CellID,LAC和RSSI(信号强度)的信息并将其记录到文件中.
电话没有睡觉时一切正常.我注意到在关闭屏幕和几分钟不活动之后我PhoneStateListener不再被调用了.我尝试将PARTIAL_WAKE_LOCK(以及其他类型的锁)添加到我的服务中,但我想这会导致严重的电池耗尽,不应该以这种方式使用.另一方面,它并没有真正帮助我.我的另一个尝试是使用Timer并PhoneStateListener在指定的时间间隔内注销/注册我.出乎意料的是,看起来这种方式有助于刷新CellId和LAC(所以我猜这是onCellLocationChanged()从我的听众那里调用的),但信号强度仍未更新.
我没有尝试使用BroadcastReciever,但经过一些深入研究主题和阅读线索后,我不认为这对我有用.
总结一下,我的问题是:为什么PhoneStateListener手机睡眠时不调用方法?有没有办法(如强制电话唤醒或使用不同的机制)有效地克服这种行为?
当屏幕关闭时,android停止通知细胞和信号变化.它是通过在RIL级别禁用URC通知来实现的.据我所知,如果不打开屏幕,就无法获得更新.广播接收器不会有任何不同的工作.
因此,如果它对您来说很实用,我建议您在检查这些值时启用屏幕.您可以通过获取唤醒锁并提供标志来执行此操作:ACQUIRE_CAUSES_WAKEUP | SCREEN_DIM_WAKE_LOCK
编辑:重新注册侦听器实际上会触发要执行的位置更改,但它不会传递当前的单元格信息,只会传递屏幕关闭之前的最后一个已知单元格信息.要获取当前的单元格信息,您仍需要打开屏幕.
| 归档时间: |
|
| 查看次数: |
2119 次 |
| 最近记录: |