Я разрабатываю приложение, которое имеет следующий реквизит: если в устройстве подключена минигарнитура, и пользователь ее удаляет, мне нужно отключить все потоки. Для этого мне нужно прослушать трансляцию AudioManager.ACTION_AUDIO_BECOMING_NOISY
. Хорошо! Здесь нет проблем.
Но когда пользователь снова подключит минигарнитуру, мне нужно отключить его. Но нет прямой трансляции AudioManager.ACTION_AUDIO_BECOMING_NOISY
. Я не могу знать, когда гарнитура снова подключена.
Одно из решений - периодически видеть, есть ли AudioManager.isWiredHeadsetOn()
true
, но это не кажется хорошим решением для меня.
Есть ли способ обнаружить, когда пользователь подключает гарнитуру на устройстве?
Отредактировано. Я попытался использовать Intent.ACTION_HEADSET_PLUG
таким образом, , но это не сработало.
В manifest.xml я положил:
<receiver android:name=".MusicIntentReceiver" >
<intent-filter>
<action android:name="android.intent.action.HEADSET_PLUG" />
</intent-filter>
</receiver>
И вот код моего MusicIntentReceiver.java
:
public class MusicIntentReceiver extends BroadcastReceiver {
public void onReceive(Context ctx, Intent intent) {
AudioManager audioManager = (AudioManager)ctx.getSystemService(Context.AUDIO_SERVICE);
if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
Log.d("Let turn the sound on!");
//other things to un-mute the streams
}
}
}
Любое другое решение попробовать?