我正在开发一个带有非常简单的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);
像那样。当我在设备上安装应用程序时,我仍然没有记录日志。
我很感激你的答案。
谢谢, 安德烈亚斯
答案 0 :(得分:0)
我不确定,但为什么使用动态注册而不是静态注册呢?只需在清单中注册接收器并绑定到onReceive()
中的服务即可。可能它会解决你的问题。