需求: ①:通话自动录音; ②:无界面,只是一个service; ③:录音自动压缩上传; ④:当用户清理后台的时候,要求service不可以被杀死; ⑤:稳定性:1、无网络的情况下;2、上传失败;3、服务报错。 解决方案: ①:通话自动录音 启动一个service,监听用户手机通话状态,当检测到用户处于通话状态下,立即开始录音,通话结束后,停止录音,并保存文件。 此功能的前提条件: 1、录音权限、读写存储空间的权限、读取通话状态的权限; 2、Service不可以被停止,否则无法录音。 3、开机启动(不可以让用户每次开机都主动去打开服务) ②:无界面,只是一个service 方案① 普通的service,监听开机广播,当用户开机的时候,启动service。但是,发现service并没有启动。想要启动一个service,必须要有一个activity,即使你不打开这个activity。 在真正做项目的时候,PM会提出各种你不能理解的需求,比如说本系统,PM要求本应用只是一个录音服务,不可以有任何界面,也不可以在手机桌面上出现应用图标。因此,方案①不可行。 方案② Android手机在设置里面都一个辅助功能(个别手机也叫:无障碍),利用这个我们可以实现一些强大的功能,前提是用户开启我们的辅助功能,抢红包软件就是利用辅助功能实现的。 
③:录音自动压缩上传 我们只需要在上传之前对文件进行压缩处理,然后再上传即可。 ④:当用户清理后台的时候,要求service不可以被杀死 不会被杀死的服务,或许只有系统服务吧。当然类似于QQ、微信他们做的这种全家桶也可以做到。大公司是可以和厂商合作的,他们的应用可以不那么容易被杀死。当然也不提倡这样做,这样就是垃圾软件,破坏了Android开发的美好环境。 其实,如果可以把服务设置成系统服务,那么只要用户不主动在辅助功能页面关掉服务,后台是清理不掉改服务的。本人在小米手机上测试过,设置成系统级别的服务后,当清理后台的时候,即使服务被杀死,也会非常快的重新启动。(感兴趣的同学可以试一下) ⑤:稳定性:1、无网络的情况下;2、上传失败;3、服务报错 思路: 当无网络的情况下,把录音文件的地址保存下来(保存的方式有很多:Sqlite、SharedPReferences等等),上传失败也一样,失败的原因可能有很多种:网络断开、接口报错等,当网络恢复的时候,可以重新上传,这样就不会丢失录音文件。 代码很简单,注释很详细: 项目的结构:
新闻热点
疑难解答