在android中检测蓝牙耳机通话按钮

时间:2017-04-07 09:44:59

标签: android bluetooth

我正在开发一个通话应用。所以我也需要从蓝牙设备中选择/挂断电话。但我无法从蓝牙耳机获得关键新闻事件。 我曾尝试使用广播和音频管理器,但只能进行播放/暂停,前一个和下一个按钮回调。

public class MediaButtonIntentReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
            KeyEvent event = (KeyEvent) intent .getParcelableExtra(Intent.EXTRA_KEY_EVENT);

            if (event == null) {
                return;
            }

            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                //context.sendBroadcast(new Intent(Intents.ACTION_PLAYER_PAUSE));
            }
        }
    }
}

清单是

<receiver android:name=".net.MediaButtonIntentReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>

我只需要在我的活动处于活动状态时才能获取事件,所以我也使用了onKeyDown和dispatchKeyEvent方法,但似乎没有任何效果。它给了我相同的结果和以前。 必须有一种方法导致系统电话应用程序正在启动此事件启动拨号程序。请告诉我一些有用的方法。

1 个答案:

答案 0 :(得分:0)

我认为您需要倾听KeyEvent.KEYCODE_CALLKeyEvent.KEYCODE_ENDCALL

可以在此处找到KeyEvents的完整列表:https://developer.android.com/reference/android/view/KeyEvent.html

请注意,大多数耳机(有线或无线)的通话处理也会使用播放/暂停按钮结束通话。

编辑:

在dispatchKeyEvent:

中尝试此操作
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if (event.getKeyCode() == KeyEvent.KEYCODE_CALL) {
        Toast.makeText(this, "CALLING!", Toast.LENGTH_LONG).show();
        return true;
    }
    return super.dispatchKeyEvent(event);
}

请记住,在处理静态KEYCODE_ {SOMEKEY}整数时,应使用event.getKeyCode();而不是event.getAction();