[英]Registering a headset button click with BroadcastReceiver in Android
[英]Headset button double click in android
我使用此代碼檢測我的廣播接收器中的單擊和雙擊耳機按鈕:
int d = 0;
@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();
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_HEADSETHOOK:
if (action == KeyEvent.ACTION_DOWN) {
d++;
Handler handler = new Handler();
Runnable r = new Runnable() {
@Override
public void run() {
Toast.makeText(context, "single click!", Toast.LENGTH_SHORT).show();
d = 0;
}
};
if (d == 1) {
handler.postDelayed(r, 500);
} else if (d == 2) {
d = 0;
Toast.makeText(context, "double click!", Toast.LENGTH_SHORT).show();
}
}break;
}
abortBroadcast();
}
但它只是檢測單擊。 兩次單擊而不是雙擊。 哪里有問題?
正確的解決方案:
static int d = 0;
@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();
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_HEADSETHOOK:
if (action == KeyEvent.ACTION_DOWN) {
d++;
Handler handler = new Handler();
Runnable r = new Runnable() {
@Override
public void run() {
// single click *******************************
if (d == 1) {
Toast.makeText(context, "single click!", Toast.LENGTH_SHORT).show();
}
// double click *********************************
if (d == 2) {
Toast.makeText(context, "Double click!!", Toast.LENGTH_SHORT).show();
}
d = 0;
}
};
if (d == 1) {
handler.postDelayed(r, 500);
}
}break;
}
abortBroadcast();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.