Android Service + BroadcastReceiver,PhoneStateListener

时间:2011-03-04 14:30:03

标签: java android service listeners

我正在开发一个带有非常简单的GUI的电话应用程序,该GUI启动服务以在后台运行。

此服务将负责在本地数据库上记录数据。据报道,这些数据与Android API允许我获取的用户操作有关。

这取决于用户接听/拒绝来电时,电话是否处于静音状态, 用户的位置和类似的东西。

另一件事可能是用户将手机充电,关闭屏幕,访问应用程序,听音乐,使用相机等等。

我对他们使用的数据不感兴趣,而不是他们正在采取的行动。

我发现了一些相关的类,一个是BroadcastReceiver,另一个是PhoneStateListener,但是我无法在我的服务中使用它们。

我有一个类(RecordEvents),它扩展了BraodcastReceiver并通过检查进来的不同动作(intent.getAction())来实现onReceive方法。如果它是我感兴趣的那个之一,我使用Log.i记录它()。

现在在我的服务(BackgroundService类)中,我可以确认它成功运行,我实例化RecordEvents,在onCreate方法中我调用registerReceiver(recordEvents,filter)recordEvents是RecordEvents的一个实例,filter是一个IntentFilter,包含所有我感兴趣的意图行动。

现在,如果我在模拟器/手机上执行任何我感兴趣的操作,则日志猫上不会显示任何打印消息。

我做错了什么?

BroadcastReceiver是否适合在后台记录数据库中的用户操作?

我还使用另一个类(PhoneEvents)来扩展PhoneStateListener,覆盖onCellLocationChanged,onDataActivity,onCallStateChanged,并且该类被实例化并由TelephonyManager.listen使用(phoneEvents,PhoneStateListener.LISTEN_CELL_LOCATION |                 PhoneStateListener.LISTEN_DATA_ACTIVITY |                 PhoneStateListener.LISTEN_CALL_STATE);

像那样。

当我在设备上安装应用程序时,我仍然没有记录日志。

我很感激你的答案。

谢谢, 安德烈亚斯

1 个答案:

答案 0 :(得分:0)

我不确定,但为什么使用动态注册而不是静态注册呢?只需在清单中注册接收器并绑定到onReceive()中的服务即可。可能它会解决你的问题。