在蓝牙设备上处理长按媒体按钮播放/暂停

Posted

技术标签:

【中文标题】在蓝牙设备上处理长按媒体按钮播放/暂停【英文标题】:Handle Long Press of Media Button Play/Pause on bluetooth device 【发布时间】:2015-04-02 07:24:25 【问题描述】:

我正在处理一个项目,我想处理长按蓝牙设备上的播放按钮的问题。 现在它只需单击一下即可。

public void onReceive(Context context, Intent intent)

    String intentAction = intent.getAction();
    if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) 
        return;
    
    KeyEvent event = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
    if (event == null) 
        return;
    

    int action = event.getAction();
    if (event.getKeyCode() == 126 || event.getKeyCode() == 127) 
        // do something 
        if (action == KeyEvent.ACTION_DOWN) 

            Toast.makeText(context,"BUTTON PRESSED!", Toast.LENGTH_LONG).show();

            if(event.isLongPress()==true)
            
                Toast.makeText(context,"Finally long press worked!!", Toast.LENGTH_LONG).show();

            


        


    

方法 isLongPress() 总是返回 false。 请告诉我什么修改可以使这个程序工作。 在此先感谢:)

【问题讨论】:

【参考方案1】:

检查您的 BT 设备的说明。耳机上的长按通话键通常意味着拒绝来电。我不确定 AVRCP 中是否定义了耳机上的长按播放键。

【讨论】:

有一个不同的按钮用于接听/拒绝电话 1.为什么密钥代码是 126 或 127? MEDIA_PLAY的key code是200,见androidxref.com/5.1.0_r1/xref/frameworks/base/data/keyboards/…。 2. 我不确定 AVRCP 中的按键是否支持长按。你可以试试看。 我很确定播放的数字是 126。由于我有一个通用的播放和暂停按钮,我也必须考虑 127(暂停)。你知道 isLongPress()这里使用的方法正确吗? 不知道BT设备长按PLAY键作为AVRCP控制器是否支持。要想得到答案,就得分析Android Framework中的Input manager。您可以在androidxref.com/5.0.0_r2/xref/frameworks/native/services/…中找到代码

以上是关于在蓝牙设备上处理长按媒体按钮播放/暂停的主要内容,如果未能解决你的问题,请参考以下文章

从蓝牙命令控制 AVAudioRecorder

当设备被蓝牙耳机锁定时,AVAsset 无法播放

手机连接蓝牙耳机无法建立通信

Android接收蓝牙多媒体按键事件的bug

(Bluez) 如何获取蓝牙耳机按键输入?

android 怎么查看蓝牙设备