为什么蓝牙音乐耳机排名耳机音乐还不错,为什么游戏不行

那些我们解过的bug(4)
问题描述:
手机连接蓝牙耳机(SAMSUNG耳机),无法用耳机切换上一首(只能切换下一首)
重现问题:
这个问题因为重现概率是100%,所以我借了一只蓝牙耳机,从设置的蓝牙进入,点击连接蓝牙耳机,切换下一首,手机能正常插入下一首。点击上一首,问题来了,确实是不能播放上一首,具体的表现是重新播放此首音乐。
初步分析:
根据问题描述,初步分析:
可能是蓝牙耳机切换下一首按键命令有问题,可能按下切换下一首按键,发出的是重播的命令。
也有可能是按键命令本身正确,但是处理切换下一首按键的代码逻辑本身的问题
问题解决:
首先,确认蓝牙耳机按键是否正常。
我用自己的小米手机测试了此蓝牙耳机,发现在小米手机上蓝牙耳机的切换上一首和切换下一首功能是正常的,那么基本上排除了第一个蓝牙耳机切换下一首按键命令问题。
下面就只有第二个原因,
我首先查看了log,但是没有发现有效的log信息。
再在网上查了一资料,找到了一个感觉有用的东西:
我选择关键字蓝牙耳机下一首按键来搜索:
KeyEvent.KEYCODE_MEDIA_NEXT
查找到代码:
……/app/Music/src/com/android/music/MediaButtonIntentReceiver.java:91:
case KeyEvent.KEYCODE_MEDIA_NEXT:
好家伙,确实有线索。我们打开此文件:
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intentAction)) {
Intent i = new Intent(context, MediaPlaybackService.class);
i.setAction(MediaPlaybackService.SERVICECMD);
i.putExtra(MediaPlaybackService.CMDNAME, MediaPlaybackService.CMDPAUSE);
context.startService(i);
} else if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
KeyEvent event = (KeyEvent)
intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (event == null) {
int keycode = event.getKeyCode();
int action = event.getAction();
long eventtime = event.getEventTime();
String command = null;
switch (keycode) {
case KeyEvent.KEYCODE_MEDIA_STOP:
command = MediaPlaybackService.CMDSTOP;
case KeyEvent.KEYCODE_HEADSETHOOK:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
command = MediaPlaybackService.CMDTOGGLEPAUSE;
case KeyEvent.KEYCODE_MEDIA_NEXT:
command = MediaPlaybackService.CMDNEXT;
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
command = MediaPlaybackService.CMDPREVIOUS;
case KeyEvent.KEYCODE_MEDIA_PAUSE:
command = MediaPlaybackService.CMDPAUSE;
case KeyEvent.KEYCODE_MEDIA_PLAY:
command = MediaPlaybackService.CMDPLAY;
此代码,我们可以知道,MediaButtonIntentReceiver主要接受广播AudioManager.ACTION_AUDIO_BECOMING_NOISY和Intent.ACTION_MEDIA_BUTTON。而我们的蓝牙按键就是发送广播Intent.ACTION_MEDIA_BUTTON。并且,我们可以看到我们的按键事件:
KeyEvent.KEYCODE_MEDIA_STOP
KeyEvent.KEYCODE_MEDIA_PAUSE
KeyEvent.KEYCODE_MEDIA_NEXT
MediaPlaybackService.CMDPREVIOUS
KeyEvent.KEYCODE_MEDIA_PLAY
再往下看:
Intent i = new Intent(context, MediaPlaybackService.class);
i.setAction(MediaPlaybackService.SERVICECMD);
if (keycode == KeyEvent.KEYCODE_HEADSETHOOK &&eventtime - mLastClickTime & 300) {
i.putExtra(MediaPlaybackService.CMDNAME,
MediaPlaybackService.CMDNEXT);
context.startService(i);
mLastClickTime = 0;
i.putExtra(MediaPlaybackService.CMDNAME, command);
context.startService(i);
mLastClickTime =
从代码,我们可以看出,启动一个服务:MediaPlaybackService,并将按键命令发送过去。
我们再打开MediaPlaybackService:
public int onStartCommand(Intent intent, int flags, int startId) {
String action = intent.getAction();
String cmd = intent.getStringExtra("command");
if (CMDNEXT.equals(cmd) || NEXT_ACTION.equals(action)) {
gotoNext(true);
} else if (CMDPREVIOUS.equals(cmd) || PREVIOUS_ACTION.equals(action)) {
if (position() & 2000) {
从代码,我们可以看出:当按键命令是上一首时,
这段代码,非常明显,就是导致不能播放上一首的原因所在。
问题找到了,解决就比较简单了:
我们再来看MediaButtonIntentReceiver广播监听器:
其主要监听如下二个广播:
&receiver android:name="com.android.music.MediaButtonIntentReceiver"&
&intent-filter&
&action android:name="android.intent.action.MEDIA_BUTTON" /&
&action android:name="android.media.AUDIO_BECOMING_NOISY" /&
&/intent-filter&
&/receiver&
监听按键事件有:
KeyEvent.KEYCODE_MEDIA_STOP:
KeyEvent.KEYCODE_HEADSETHOOK:
KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
KeyEvent.KEYCODE_MEDIA_NEXT:
KeyEvent.KEYCODE_MEDIA_PREVIOUS:
KeyEvent.KEYCODE_MEDIA_PAUSE:
KeyEvent.KEYCODE_MEDIA_PLAY:
当监听到按键事件后,再启动服务:MediaPlaybackService
&service android:name="com.android.music.MediaPlaybackService"
android:exported="false" /&
在onStartCommand方法中判断按键事件,再进行相应的操作。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:150430次
积分:3562
积分:3562
排名:第7705名
原创:191篇
评论:60条
我的github项目: /hfreeman2008
阅读:1605
文章:74篇
阅读:68599
文章:19篇
阅读:7940
文章:29篇
阅读:10840
阅读:10566
(1)(1)(9)(14)(6)(3)(23)(5)(3)(1)(3)(1)(2)(1)(4)(3)(10)(6)(8)(5)(1)(4)(1)(2)(4)(6)(5)(1)(3)(7)(8)(4)(2)(10)(5)(1)(5)(1)(4)(1)(6)(2)(4)经验570 米
在线时间36 小时
版本V8.1.3.0.MXDCNDI
积分 661, 距离下一级还需 1339 积分
积分 661, 距离下一级还需 1339 积分
机型小米手机3-WCDMA/CDMA版
签到次数11
MIUI版本V8.1.3.0.MXDCNDI
通过手机发布
如题,蓝牙耳机的扬声器确认正常,连接以后可以听到耳机的语音提示,但是就是无法听手机播放的歌,之前还好好的,系统一直也是稳定版的MIUIv6,小米3w
求求各位解答这是怎么回事呀,跪谢!
而且耳机连接后在 米音 那里还是提示未连接耳机
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
经验570 米
在线时间36 小时
版本V8.1.3.0.MXDCNDI
积分 661, 距离下一级还需 1339 积分
积分 661, 距离下一级还需 1339 积分
机型小米手机3-WCDMA/CDMA版
签到次数11
MIUI版本V8.1.3.0.MXDCNDI
通过手机发布
经验570 米
在线时间36 小时
版本V8.1.3.0.MXDCNDI
积分 661, 距离下一级还需 1339 积分
积分 661, 距离下一级还需 1339 积分
机型小米手机3-WCDMA/CDMA版
签到次数11
MIUI版本V8.1.3.0.MXDCNDI
通过手机发布
经验5834 米
在线时间540 小时
版本5.2.25
解答只为帮助更多需要帮助的米粉
积分 7249, 距离下一级还需 12751 积分
积分 7249, 距离下一级还需 12751 积分
机型小米手机3/4 WCDMA版
签到次数37
MIUI版本5.2.25
来自网页版
建议楼主尝试着重新适配下蓝牙耳机试试看,给您带来不便我们深感抱歉,希望可以帮到你。
经验536 米
在线时间52 小时
版本5.10.30
积分 653, 距离下一级还需 1347 积分
积分 653, 距离下一级还需 1347 积分
机型小米Note 移动4G/联通4G
签到次数24
MIUI版本5.10.30
通过手机发布
蓝牙耳机应该是单声道的吧,,下载一个蓝牙听歌就可以了,
经验536 米
在线时间52 小时
版本5.10.30
积分 653, 距离下一级还需 1347 积分
积分 653, 距离下一级还需 1347 积分
机型小米Note 移动4G/联通4G
签到次数24
MIUI版本5.10.30
通过手机发布
灬何为矜持 发表于
蓝牙耳机应该是单声道的吧,,下载一个蓝牙听歌就可以了,
经验3115 米
在线时间258 小时
版本7.2.23
机型小米Note 顶配版
签到次数97
MIUI版本7.2.23
来自网页版
MIUI 因你更精彩!
经验1970 米
在线时间36 小时
版本V8.1.12.0.MBFCNDI
积分 2203, 距离下一级还需 2797 积分
积分 2203, 距离下一级还需 2797 积分
机型小米手机3-TD版
签到次数41
MIUI版本V8.1.12.0.MBFCNDI
来自网页版
经验570 米
在线时间36 小时
版本V8.1.3.0.MXDCNDI
积分 661, 距离下一级还需 1339 积分
积分 661, 距离下一级还需 1339 积分
机型小米手机3-WCDMA/CDMA版
签到次数11
MIUI版本V8.1.3.0.MXDCNDI
通过手机发布
灬何为矜持 发表于
蓝牙耳机应该是单声道的吧,,下载一个蓝牙听歌就可以了,
之前一直可以听呢,突然听不了了
MIUI 7纪念勋章
MIUI五周年
MIUI五周年纪念勋章
已关注微信
已关注极客秀微信
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
Copyright (C) 2016 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号电脑用蓝牙耳机可以听游戏和网页音乐吗?_蓝牙耳机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:27,480贴子:
电脑用蓝牙耳机可以听游戏和网页音乐吗?收藏
我想问下,蓝牙耳机是不是只能听音乐和聊天啊?像游戏和网页音乐这种一般的音乐,用蓝牙耳机能听到吗?
京东蓝牙耳机,家电品类齐全,畅享满减钜惠,大件免费上门安装,爽购不停歇!蓝牙耳机,网上买家电,约惠上京东,白条有券省更多!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 蓝牙耳机听音乐怎么样 的文章

 

随机推荐