车机系统前端应用播放音视频焦点问题

背景

车机系统前端应用需要在程序进入后台 或者 被蓝牙打断时暂停播放,
进入前台 或者 蓝牙结束时,保持暂停状态

现状

车机前端应用进入后台时,手动调用暂停功能,视频暂停,车机进入前台后,保持暂停状态。√
车机前端应用视频播放中,此时蓝牙电话进入,视频会自动暂停播放(注意 是自动暂停,不是手动,原因不明
),蓝牙电话结束后,会自动续播,且没有声音(要求保持暂停状态,恢复播放后有声音

解决方案

  1. 去掉video组件控制条提供的播放、暂停功能,一律手动控制
  2. 自定义变量,记录播放状态,false代表暂停,true代表播放
  3. 监听视频播放状态,在onpause事件中,将自定义变量改为false
  4. 在onplay事件中,检测自定义变量的状态,如果是暂停状态,则暂停播放
  5. 手动触发播放、暂停时,将自定义变量改为对应状态

1. 为什么去掉系统controls提供的播放、暂停按钮

因为系统提供的播放、暂停按钮,不会触发自定义事件,不能手动改变自定义变量的状态,后续的播放、暂停功能都是通过自定义变量控制的

2. 为什么要监听视频播放、暂停状态

其实主要是监听暂停状态,因为在蓝牙电话进入时,视频会自动暂停,此时将自定义变量改为false

3. 已经监听了状态,为什么还要自定义变量,接收状态

监听状态主要是判断当前是播放还是暂停,如果是播放转暂停,在蓝牙电话进入的时候会自动转,此时我们只需要在onpause里面将自定义变量改为false

此时如果蓝牙电话结束,现状是会自动续播(即使在onpause监听里面手动触发了暂停,也是无效的,蓝牙结束后还是会自动续播
),触发onplay的监听,因此,我们需要在onplay的监听内部,判断下自定义变量的状态,前面也说到,只有手动触发播放的时候,才会将自定义变量改为true,现在是蓝牙结束后,自动触发,所以此时自定义变量仍未false

onplay监听中,检测到自定义变量为false时,就调用pause方法,进行手动暂停,实现蓝牙电话进入时自动暂停(系统
),蓝牙电话结束后保持暂停状态(判断+手动

至于声音,是前端应用和安卓之间的沟通,安卓会提供抢夺焦点的回调,我们在回调内播放就会有声音。