关于语音提醒app的设计思考

项目需求如下: 

一,动态设置服务器地址(http或者socket)

   分析:动态设置服务器ip和端口号,根据项目需求,这里还需要重置所有的项目资源和内存

  实现思路:请求地址放置在私有的sharedperfence文件中,属于项目通用配置(appConfig),app每次启动获取一次放入内存,实现动态配置服务器地址

二,用户名,密码登录。(可以理解为 后台设置好的)

  分析:一个登录界面(获取连接凭证),需要获取服务器连接密钥,这里通常都是一个http请求

  实现思路:登录界面输入账号密码,保存用户凭证到sharedPerfence中,保证在重连时能够自动连接到服务器

三,接收服务器消息

  分析:接收服务器消息,这里类似服务器主动推消息过来,咱们常用的实现方式包括,轮询机制,websocket长连接

  实现思路:使用轮询机制,那么配合市面上的一些收款软件速度,一般可以设置在10s左右py一次,采用service中创建循环线程的方式,实现轮询

  使用websocket长连接,安卓现在成熟的框架也很多,比如Java-WebSocket

四,语音播报

  分析:结合整体需求,这里是需要将文字转化成语音播放出来(就不能提前放录音了),主要在于收到的文本内容如何用语音播放出来

  实现思路:语音技术的话,科大讯飞做了这么多年,可以考虑接入

  第二种是,TextToSpeech的api,好像是安卓内置的 

五,开机启动,常驻内存

  分析:开机启动主要需要注意安卓系统默认是禁止三方软件开机自启动的,常驻内存,就是咱们常说的内存保活,网上流传了相当多各个版本的保活措施(也是这个项目唯一没法保证的地方),结合项目,这里的保活,主要是为了保证正常发出语音,所以重点是保活service

  实现思路:

   开机启动:设置权限android.permission.RECEIVE_BOOT_COMPLETED

   注册静态广播android.intent.action.BOOT_COMPLETED   

  在广播中定义要启动的service

  注意要给app设置自启动权限,避免无论如何都没法自启动的事情发生

  内存常驻:我们要做到尽自己最大努力活下来!

1,监听全局的静态广播,比如时间更新的广播、开机广播、解锁屏、网络状态、解锁加锁亮屏暗屏(3.1版本),高版本需要应用开机后运行一次才能监听这些系统广播,目前此方案失效。可以更换思路,做APP启动后的保活(监听广播启动保活的前台服务)

2,假如应用被系统杀死,那么定时器则失效,此方案失效。JobService在5.0,5.1,6.0作用很大,7.0时候有一定影响(可以在电源管理中给APP授权)

3,双Service守护:高版本已失效,5.0起系统回收策略改成进程组。双Service方案也改成了应用被杀,任何后台Service无法正常状态运行

4,提高Service优先级: 只能一定程度上缓解Service被立马回收

六:隐藏注意事项

  1)  离线消息处理:如果说在掉线重连的情况下,会有积攒的语音消息,那么如果不做处理,重连成功,接收100条语音消息,效果一定特别感人!

   处理思路:建立语音任务缓存队列,取一条播放就删除一条,队列清空,播放任务停止,有新任务再重新启动播放语音

最后:这是一些我的想法,如果有任何不足或者想的不周到的地方,请大家给我留言,谢谢大家!

发布了58 篇原创文章 · 获赞 10 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_34203714/article/details/100079095