Android 如何处理耳机按钮的咔嗒声?

Android 如何处理耳机按钮的咔嗒声?,android,onclick,Android,Onclick,我有这个代码来处理耳机中的按键点击。问题是我的优先级低,当我点击按钮时,收音机就会打开。我希望能够优先考虑我的应用程序。我试图增加setPriority编号,但它不起作用 public class MediaButtonIntentReceiver extends BroadcastReceiver { public MediaButtonIntentReceiver() { super(); } @Override public void o

我有这个代码来处理耳机中的按键点击。问题是我的优先级低,当我点击按钮时,收音机就会打开。我希望能够优先考虑我的应用程序。我试图增加setPriority编号,但它不起作用

public class MediaButtonIntentReceiver extends BroadcastReceiver {

    public MediaButtonIntentReceiver() {
        super();
    }

    @Override
    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 (action == KeyEvent.ACTION_MULTIPLE) {
            // do something
            Toast.makeText(context, "BUTTON PRESSED!", Toast.LENGTH_SHORT).show();
        }
        abortBroadcast();
    }
//其他类中的代码

   IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);//"android.intent.action.MEDIA_BUTTON"
        MediaButtonIntentReceiver r = new MediaButtonIntentReceiver();
        filter.setPriority(1000); **//increasing this does not work**
        registerReceiver(r, filter);

您不能为
意图注册接收者。使用
registerReceiver
操作\u MEDIA\u按钮
,因为它由媒体框架单独处理,以发送到正确的媒体应用程序,如中所述

但是,如果您想在前台处理它,您根本不需要使用
Intent.ACTION\u MEDIA\u按钮
,因为所有
KeyEvent
s首先通过(和
onKeyUp()
发送到活动的
活动
)。因此,您可以直接处理
KeyEvent

@Override
public boolean onKeyDown (int keyCode, 
            KeyEvent event) {
  // This is the center button for headphones
  if (event.getKeyCode() == KeyEvent.KEYCODE_HEADSETHOOK) {
    Toast.makeText(context, "BUTTON PRESSED!", Toast.LENGTH_SHORT).show();
    return true;
  }
  return super.onKeyDown(keyCode, event);
}

您不能为
意图注册接收者。使用
registerReceiver
操作\u MEDIA\u按钮
,因为它由媒体框架单独处理,以发送到正确的媒体应用程序,如中所述

但是,如果您想在前台处理它,您根本不需要使用
Intent.ACTION\u MEDIA\u按钮
,因为所有
KeyEvent
s首先通过(和
onKeyUp()
发送到活动的
活动
)。因此,您可以直接处理
KeyEvent

@Override
public boolean onKeyDown (int keyCode, 
            KeyEvent event) {
  // This is the center button for headphones
  if (event.getKeyCode() == KeyEvent.KEYCODE_HEADSETHOOK) {
    Toast.makeText(context, "BUTTON PRESSED!", Toast.LENGTH_SHORT).show();
    return true;
  }
  return super.onKeyDown(keyCode, event);
}

您是想在后台获取媒体按钮,还是仅当应用程序位于前台时才获取媒体按钮?你是在构建媒体应用程序还是完全其他的东西?只有当我的应用程序在前台时…我在构建这样的东西:当我单击按钮时,会向我的设备发送一条祝酒词,你是在尝试在后台获取媒体按钮,还是仅当你的应用程序在前台时?你是在构建媒体应用程序还是其他什么?只有当我的应用程序在前台时……我在构建一些东西,当我单击按钮时,会向我的应用程序发送Toast消息,但我在onCreate之外实现了该方法。在onCreate方法中如何调用他?您不需要在
onCreate
中执行任何操作。使用此代码,只要您的活动出现在屏幕上,您就会截获
播放暂停
键。如果您调试应用程序,是否会使用其他
getKeyCode()
调用
onKeyDown()
?可能您的耳机与其他耳机不同。它会在“动作”下降和“动作”上升的同时被呼叫。因为我按下并释放是的,这就是KeyEvents的工作方式。通常,如果您想截取播放/暂停按钮,您需要在向下操作上进行操作。这听起来确实像是得到了KeyEvents,那么到底是什么问题呢?但是我在onCreate之外实现了这个方法。在onCreate方法中如何调用他?您不需要在
onCreate
中执行任何操作。使用此代码,只要您的活动出现在屏幕上,您就会截获
播放暂停
键。如果您调试应用程序,是否会使用其他
getKeyCode()
调用
onKeyDown()
?可能您的耳机与其他耳机不同。它会在“动作”下降和“动作”上升的同时被呼叫。因为我按下并释放是的,这就是KeyEvents的工作方式。通常,如果您想截取播放/暂停按钮,您需要在向下操作上进行操作。当然,听起来你正在获得KeyEvents,那么到底是什么问题呢?