2016-06-02 6 views
1

Ich verwende einen Broadcast-Empfänger, um Headset-Taste klicken zu erkennen. Unten ist der Code für Broadcast-Empfänger.Android - Broadcast-Empfänger zum Erkennen der Headset-Taste Klick funktioniert nicht API 23 (Marshmallow)

public class HeadSetButtonStateReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (intent.getAction().equals(Intent.ACTION_MEDIA_BUTTON)) { 
      KeyEvent event = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
      if (event != null) { 
       int action = event.getAction(); 
       if (action == KeyEvent.ACTION_DOWN) { 
        Toast.makeText(context, "BUTTON PRESSED!", Toast.LENGTH_SHORT).show(); 
        EventBus.getDefault().post(new HeadSetButtonEvent("1")); 
       } 
      } 
     } 

    } 
} 

Es funktioniert gut auf API 22 (Lollipop), aber es auf API 23 funktioniert nicht (Eibisch-Geräte). Ich habe versucht, auf Stackoverflow zu schauen, habe aber nichts gefunden.

+0

Was ist Ihre Ziel-API @Vicky? – Lampard

+0

@CrazyAndroid API 23. – Vicky

+0

@CrazyAndroid Nein, aber ich registriere den Broadcast-Empfänger in der Aktivität nicht in der Manifest-Datei. – Vicky

Antwort

1

Try int statt

if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { 
    KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
    int intKey = event.getKeyCode(); 
} 

Sie wahrscheinlich zwei verschiedene int-Werte für 1-Taste erhalten.

0
check the priority 

IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON); 
    MediaButtonIntentReceiver recev = new MediaButtonIntentReceiver(); 
    filter.setPriority(1000); 
    registerReceiver(recev , filter); 
+0

Funktioniert immer noch nicht nach dem Einstellen von 'filter.setPriority (1000);'. – Vicky