Logo cn.androidermagazine.com
Logo cn.androidermagazine.com

重播:通过蓝牙进行播放控制的日益增长的斗争

Anonim

这是我在工作,家庭,床上,淋浴和中间的任何地方使用的,以保持我的理智和快乐。 音乐让我变得更好,因为音乐是我Android体验的重要组成部分,所以在过去的几年里,特别是最近几个月,我一直在痛苦地意识到这种情况已经缓慢下降。

有时我打开蓝牙耳机,点击播放,没有任何反应。 没有什么比过去发生的更多。

在我早期的Android时代,我的口袋里有Soarin(是的,我把我的三星Captivate Glide命名)和我脖子上的第一对Kinivo蓝牙耳机,我不需要打开Goog​​le Play音乐,我只需要点击在我的耳机上播放。 事实上,我从一个抽屉里拿出一个三星Galaxy SII,几个月来第一次启动它,配上蓝牙耳机,然后点击播放按钮。 音乐播放了。

与我的马厩中的当前设备不同。

HTC 10有时不会遵守蓝牙控制,不管是否持续通知音乐应用程序。 我宁愿在我的Moto 360或手机本身上玩。 HTC A9同样挑剔。 Nexus 5X有时不会通过持续通知来启动音乐备份,但有时会在没有通知的情况下进行备份。 三星S6边缘将播放,但有时不会播放最近活动的音乐应用程序,它将默认返回预先加载的音乐应用程序。

有一句话在这里不断重复:有时候。 这是因为这是一个存在很多变数的问题:您正在使用的Android设备,您正在使用的蓝牙设备,您的设备的Android和蓝牙版本,您尝试播放的音乐应用,你所处的环境是什么,等等。很多事情都会导致一个看似简单的按钮问题,每次按下按钮都不起作用。

那么这里究竟发生了什么? 嗯,答案有点 - 好的, 很多 - 技术性的。

当您按下按钮时,它将被Android解释并通过KeyEvents在整个系统中广播。 耳机上的下一个按钮将通过KeyEvent解释并作为KEYCODE_MEDIA_NEXT传送。 对于不同的按钮,甚至对于相同的按钮,可以提取多种值。 大多数耳机上的播放按钮也是暂停按钮,因此该键可以返回KEYCODE_MEDIA_PAUSE,KEYCODE_MEDIA_PLAY,或更可能的KEYCODE_MEDIA_PLAY_PAUSE,具体取决于设备及其当前状态。 顺便说一下,如果你曾经看过暂停音乐并且音乐在其他地方开始,而你正在观看/收听的内容暂停,这就是KeyEvent的责任,因为它被两个应用程序接收并采取行动。

一旦KeyEvents被解释,它们仍然必须被通过BroadcastReceiver意图侦听媒体按钮的音乐应用程序听到。 毕竟,如果一个应用程序无法看到它,它就无法对KeyEvent起作用。 如果有什么东西阻止了应用程序中的接收器接收按钮按下,它可能会以多种方式搞乱播放控件,包括我上面描述的间歇性问题。 如果一个应用程序在失去Audio Focus时会过快地注销其BroadcastReceiver(Android确定哪些应用程序可以在给定时间播放音频的方法),那么当您暂停音乐时,它可能会失去停止聆听并且听不到按下按钮的消息它再次开始播放。 这就是为什么媒体应用正确处理Audio Focus和BroadcastReceiver非常重要的原因,即使设备丢失了前者,它也不会失去后者。

其中很大一部分取决于您的音乐应用程序的编程程度以及当您按下耳机上的按钮时设备正在播放哪些媒体按钮。 这也意味着即使您购买设备时播放控件是一致的,也可以通过应用程序更新或系统更新来破坏它们,从而改变它停止收听的速度。

对于像谷歌播放音乐这样的应用程序,破坏事物的更新似乎越来越频繁。 虽然大多数休息时间很快得到修复,但其 间歇性问题(例如您的音乐无法在蓝牙上正常启动)可能难以记录和正确识别,从而进一步减慢可能的修复速度。

如果音乐应用程序没有音频焦点并且没有作为前台服务运行(如果媒体播放器的持久通知不存在),则有可能是Android系统(更具体地说是Doze)或所谓的“资源” - 保存“应用程序可以杀死应用程序以释放内存用于其他活动。 当发生这种情况时,击中游戏可能无法执行任何操作,因为没有任何接收器打开并正在侦听命令。

现在,就像有几件事可能会破坏你的播放控件一样,也有尝试修复它的选项。

第一个解决方案有点极端,但是用户现在可以在当前手机上实现的少数解决方案之一,而不会对软件进行任何根本改动。 使用Tasker和AutoInput等应用程序,我们可以检测按钮按下,禁止原始KeyEvent操作,然后执行更专业(更一致)的命令,直接针对一个应用程序。 例如,我们可以将其重新映射为特定于Google Play音乐的播放/暂停切换命令,而不是播放按钮是可以被许多媒体服务拾取或忽略的通用播放媒体命令,以便其他应用不会启动而不是。

这对于编程来说可能很繁琐,通过抑制原始操作并替换它,我们打破了我们可能想要在YouTube或Netflix等其他应用中使用的原生暂停按钮。 简而言之,对于使用各种媒体应用的非技术用户或用户来说,这并不是一个很好的解决方案。

许多手机都包含一系列手势和按钮动作,您可以在“设置”中打开或关闭这些动作,例如双击以唤醒或双击相机的主页/电源。 虽然将蓝牙控件添加到此列表可能会使其延长并使其复杂化,但如果Android系统确认并将KeyEvent指向特定应用程序而不是将通用信号广播到任何接收器(或不是)正在收听,我们可以确保一致性。 我们之前已经在设备上看到过这种情况,例如当Moto Assist连接到汽车的蓝牙时打开指定的音乐应用程序。

改变Android处理媒体按钮的方式 - 并且总体上处理按钮输入,因为蓝牙控制器和键盘遇到了他们自己的问题 - 可能会产生尽可能多的新问题,但是考虑到事物的数量可以 - 并且去做 - 去在目前的系统中错了,可能值得打破鸡蛋制作新的煎蛋卷。

在一天结束时,日常用户不想深入了解关键命令,接收器以及哪个应用程序现在具有音频焦点。 我们希望 我们的 重点放在音乐本身以及它带给我们的地方。 如果我不能在第一次尝试时打开使我在嘈杂,拥挤的地方保持理智的音乐,我就不是一个快乐的女孩。 我敢打赌,我不是唯一一个。

我们可能会使用我们的链接获得购买佣金。 学到更多。