2013-12-25 3 views
0

Я использую широковещательный приемник для обнаружения действий кнопки гарнитуры. Я использую этот код в onReceive функции долгого клик:Как определить длительность нажатия кнопки гарнитуры с помощью широковещательного прослушивателя?

@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.FLAG_LONG_PRESS) 
       Toast.makeText(context, "Long click!", Toast.LENGTH_SHORT).show(); 
     break; 
    } 
    abortBroadcast(); 

} 

Но это было не work.Where проблемы? Есть ли другой путь?

ответ

1

Вот решение:

@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_UP) 
       if (SystemClock.uptimeMillis() - event.getDownTime() > 2000) 
        Toast.makeText(context, "Long click!", Toast.LENGTH_SHORT).show(); 
     break; 
    } 
    abortBroadcast(); 

} 
+0

Ее не работает .. Когда я ключ долгое нажатие гарнитуры .. даже onReceved не называется .. –

+0

@UpendraShah убедитесь, что ваш вещания слушатель будет вызван. В некоторых случаях другие приложения не позволяют слушателю приложения получать события. – Mehrdad

Смежные вопросы