我正在开发一款Android应用程序,以监测手机的来电和去电,并将通话信息记录到文件中。从我所了解的信息来看,PhoneStateListener
可以满足我的需求。
问题在于,我需要该应用程序在后台运行,而我正考虑使用服务来实现。然而,我找到的每一个使用监听器的示例都是在主活动中声明,因此我不确定是否需要创建服务才能使其在后台运行。
为了更详细地说明情况,我有具体的指令,不能创建一个“替换”默认呼叫应用程序的应用程序,因此创建GUI没有太大用处(我知道应用程序需要一个主活动,但它唯一的功能应该是启动监视器)。
目前我拟定的想法如下:
class CallMonitorService : Service() {
private lateinit var serviceLooper: Looper
private lateinit var serviceHandler: ServiceHandler
private lateinit var monitor: StateMonitor
private inner class ServiceHandler(looper: Looper) : Handler(looper) {
override fun handleMessage(msg: Message) {...}
}
override fun onCreate() {
Log.d(serviceName, "Created")
HandlerThread("ServiceStartArguments", Process.THREAD_PRIORITY_BACKGROUND).apply {
start()
// Get the HandlerThread's Looper and use it for our Handler
serviceLooper = looper
serviceHandler = ServiceHandler(looper)
val manager = getSystemService(TELEPHONY_SERVICE) as TelephonyManager
manager.listen(StateMonitor(), PhoneStateListener.LISTEN_CALL_STATE | ...)
}
}
...
}
class StateMonitor : PhoneStateListener() {
// Handler methods
}
总而言之,我需要PhoneStateListener
在任何时刻都能运行,而不需要应用程序在前台运行。 我应该创建一个后台服务来运行监听器,还是监听器自己就能在后台运行?