最近项目中需要做类似音乐播放在线功能,同时推出播放页面时,需要有个公共控制器,悬浮在所有页面,可点击回到播放页面,第一想法就是系统悬浮窗了,做的过程中陆续遇到几个问题:
1、悬浮窗在安卓7.0版本前,如果要躲过授权可以将悬浮窗的类型设置为toast类型,但是在更高版本,却是躲不过授权这个部分,然后还是老老实实写了申请授权的,
2、授权完成后,悬浮窗是可以正常显示的了,但是这个时候又遇到一个问题,产品的需求是只需要在应用内显示悬浮窗,好了,只能通过判断APP的状态是否处于前台运行还是后台运行,通过在APPLication中注册监听,监听所有activity的生命周期状态,在onresume以及onstop中另外加以判断是否处于前后台,如果是前台,则显示悬浮窗,如果是后台,则隐藏。这个时候发现,这个隐藏又几秒的延迟,回到桌面时,悬浮窗过一会才隐藏,,,,坑有没有,以为光明大道就在眼前了,结果不知道怎么解决问题了,后面因为看了网易云音乐的做法,发现每个页面都有控制栏,而且不需要授权,才想到有更好的办法
3、最后的办法就是,在BaseActivity中添加这个公共控件,再在onresume以及onpause中做判断业务就行了(当音乐播放中,显示此控件),这个也发现一个小小的问题,不知道是不是技术不到位的原因,播放音乐是用的Service,按关闭音乐播放,退出播放页面时调用stopService后,Service居然没有立即走销毁方法,导致MediaPlayer状态没有及时修改到,控件还是显示在前一个activity,最后还是在调用stopService前面使用了handler,修改BaseActivity判断条件中的MediaPlayer播放状态,,总是实现想要的效果了