我正在开发耳机按钮控制器,并使用广播接收器来检测耳机按钮按下。
((AudioManager) getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(new ComponentName(getPackageName(), MediaButtonIntentReceiver.class.getName()));
onReceive
方法:
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();
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_HEADSETHOOK:
if (action == KeyEvent.ACTION_DOWN) {
long time = SystemClock.uptimeMillis();
// double click
if (time - sLastClickTime < DOUBLE_CLICK_DELAY)
// do something
Toast.makeText(context, "BUTTON PRESSED DOUBLE!",
Toast.LENGTH_SHORT).show();
// single click
else {
// do something
Toast.makeText(context, "BUTTON PRESSED!",
Toast.LENGTH_SHORT).show();
}
sLastClickTime = time;
}
break;
}
abortBroadcast();
}
它工作正常。 问题是在HTC android手机中它无法接收双击。当您双击耳机按钮时,它默认拨打您的最后一个电话,我无法在我的应用程序中检测到双击。 有没有办法用android API禁用这个动作?
我尝试将广播接收器的优先级设置为大量,但它不起作用。 即使我试图在电话的通话记录中放置假/无效通话,但我不能这样做。 任何想法如何解决这个问题?
答案 0 :(得分:2)
解决方案非常简单。在清单文件中将优先级设置为最大整数(2147483647)而不是Google(1000)定义的最大值,解决了问题,并且电话不会通过双击拨打最后一个号码,并且广播接收器检测到双击耳机按钮。
<receiver
android:name=".MediaButtonIntentReceiver"
android:enabled="true" >
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
答案 1 :(得分:0)
您的解决方案对我来说也不起作用,这也不是最佳做法。
对于遇到同样问题的其他人。这就是我在音乐播放器中用来处理单击和双击耳机控制的内容。这适用于所有耳机。
static final long CLICK_DELAY = 500;
static long lastClick = 0; // oldValue
static long currentClick = System.currentTimeMillis();
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_MEDIA_BUTTON)) {
KeyEvent keyEvent = (KeyEvent) intent.getExtras().get(Intent.EXTRA_KEY_EVENT);
if (keyEvent.getAction() != KeyEvent.ACTION_DOWN)return;
lastClick = currentClick ;
currentClick = System.currentTimeMillis();
if(currentClick - lastClick < CLICK_DELAY ){
//This is double click
} else {
//This is single click
}
}