Próbuję wstrzymać odtwarzanie muzyki, gdy zestaw słuchawkowy jest odłączony.Plik Intent.ACTION_HEADSET_PLUG jest odbierany, gdy aktywność się rozpoczyna
Utworzyłem program BroadcastReceiver, który nasłuchuje na intencje ACTION_HEADSET_PLUG i działa na nich, gdy stan extra wynosi 0 (dla odłączonego). Mój problem polega na tym, że intencja ACTION_HEADSET_PLUG jest odbierana przez mój program BroadcastReceiver za każdym razem, gdy aktywność jest uruchamiana. Nie takiego zachowania się spodziewam. Spodziewam się, że cel zostanie uruchomiony tylko wtedy, gdy zestaw słuchawkowy jest podłączony lub odłączony.
Czy istnieje przyczyna, że intencja ACTION_HEADSET_PLUG została złapana natychmiast po zarejestrowaniu odbiornika z tym filtrem IntentFilter? Czy istnieje wyraźny sposób, w jaki mogę pracować z tym problemem?
Zakładam, że ponieważ domyślny odtwarzacz muzyki realizuje podobne funkcje, gdy zestaw słuchawkowy jest odłączony, jest to możliwe.
Czego mi brakuje?
Jest to kod rejestracyjny
registerReceiver(new HeadsetConnectionReceiver(),
new IntentFilter(Intent.ACTION_HEADSET_PLUG));
To jest definicja HeadsetConnectionReceiver
public class HeadsetConnectionReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.w(TAG, "ACTION_HEADSET_PLUG Intent received");
}
}
Alternatywnym rozwiązaniem byłoby użycie metody removeStickyBroadcast() w przypadkach, gdy nie można po prostu zignorować poleceń, gdy usługa jest Play. – greg7gkb
Myślę, że jeszcze lepszym rozwiązaniem jest użycie [isInitialStickyBroadcast()] (http://developer.android.com/reference/android/content/BroadcastReceiver.html#isInitialStickyBroadcast%28%29) w twoim odbiorniku. Nie wymaga to zdefiniowania uprawnień do usuwania programów lepkich i nie spowoduje efektów ubocznych w innych aplikacjach. – amram99
Hej znowu Doug. Być może źle zrozumiałem coś o tym systemie odbiorczym, który ma android. Ale w jaki sposób masz dostęp do gry isPlaying, czy rozpoznałbym ich w pierwotnej aktywności? :-) –