利用服务实现电话监听

来源:互联网 发布:基因药物有哪些 知乎 编辑:程序博客网 时间:2024/04/27 15:22
 服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。所以,我们接下来介绍Android四大组件之一Service。

1.  Service是什么

Service是Android的四大组件之一,即Android系统的服务(不是一个线程,是主程序的一部分),与Activity不同,它是不能与用户交互的,不能自己启动的,需要调用Context.startService()来启动,运行后台,如果我们退出应用时,Service进程并没有结束,它仍然在后台行。比如我们播放音乐的时候,有可能想边听音乐边干些其他事情,当我们退出播放音乐的应用,如果不用Service,我们就听不到歌了,所以这时候就得用到Service了。

2.Service生命周期

①onCreate() 创建Service

②onStart(Intent intent, int startId) 启动Service

③onDestroy() 销毁Service

④onBind() 返回一个IBinder接口对象给Service

3.启动和停止Service

①启动:startService(Intent intent)来启动Service,这时Service会调用自身的onCreate()方法(该Service未创建),接着调用onStart()方法。

②停止:stopService(Intent intent)来停止Service,这时Service会调用自身的onDestory()方法。

4.绑定Service

调用bindService(Intent service, ServiceConnection conn, int flags)来绑定一个Service,这时Service会调用自身的onCreate()方法(该Service未创建),接着调用onBind()方法返回客户端一个IBinder接口对象。(注意:如果返回null,ServiceConnection对象的方法将不会被调用)

参数①service:Intent对象 。

参数②conn:ServiceConnection对象,实现其onServiceConnected()和onServiceDisconnected()在连接成功和断开连接时处理。

参数③flags:Service创建的方式,一般用Service.BIND_AUTO_CREATE表示绑定时自动创建。

看看官方给出的比较流程示意图:

 

官方文档告诉我们,一个service可以同时start并且bind,在这样的情况,系统会一直保持service的运行状态如果service已经start了或者BIND_AUTO_CREATE标志被设置。如果没有一个条件满足,那么系统将会调用onDestory方法来终止service.所有的清理工作(终止线程,反注册接收器)都在onDestory中完成。

 

利用服务实现电话监听代码:

清单设置(一个receiver,一个service,若干权限)

电话监听服务类:PhoneListenerService

                

                           }

                   }

          }

 

利用开机启动广播启动服务(实验环境中为了方便起见可以先改用短消息广播)

开机启动完成广播action

<action android:name="android.intent.action.BOOT_COMPLETED"/>

          }

}

原创粉丝点击