Принять отключение наушников занимает слишком много времени
Я хочу приостановить MediaPlayer, когда пользователь отключает наушники. Я узнал, что я могу использовать "ACTION_AUDIO_BECOMING_NOISY"
трансляцию, так что я попробовал!
Теоретически это работает, НО время получения занимает слишком много времени. Музыка все еще играет в течение 3-5 секунд, прежде чем она действительно останавливается. Это было бы неприемлемо для пользователя.
Как другие разработчики могут приостановить его в миллисекундах? Есть ли лучшие решения?
Мой BroadcastReceiver, который на самом деле для уведомлений:
public class NotificationBroadcast extends BroadcastReceiver {
...
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {
Intent iPause = new Intent(context , SongService.class);
iPause.putExtra("com.Hohos.mplay.Services.SongService.MEDIA_ACTION", NOTIFY_EXTRA_PAUSE);
context.startService(iPause);
}
...
}
Я также добавил <uses-permission android:name="android.permission.ACTION_HEADSET_PLUG"/>
, который действительно не имеет никакого значения
Спасибо за помощь ребята!
1 ответ
Чтобы узнать, когда пользователь отключает наушники, необходимо прослушать действие ACTION_HEADSET_PLUG и проверить state
дополнительно:
Broadcast Action: Проводная гарнитура подключена или отключена.
Намерение будет иметь следующие дополнительные значения:
- состояние - 0 для отключенного, 1 для подключенного.
- name - тип гарнитуры, удобочитаемая строка
- микрофон - 1, если в гарнитуре есть микрофон, 0 в противном случае
Это пример:
public class MainActivity extends Activity {
private HeadsetBroadcastReceiver mHeadsetBroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceiver = new HeadsetBroadcastReceiver();
}
@Override
protected void onResume() {
IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
registerReceiver(mHeadsetBroadcastReceiver, filter);
super.onResume();
}
@Override
protected void onPause() {
unregisterReceiver(mHeadsetBroadcastReceiver);
super.onPause();
}
private class HeadsetBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
int state = intent.getIntExtra("state", -1);
if (state == 0) {
//Headset is unplugged
} else if(state == 1) {
//Headset is plugged
}
}
}
}
}