2015-10-07 3 views
1

Я хочу приостановить MediaPlayer, когда пользователь отключает наушники. Я узнал, что могу использовать трансляцию "ACTION_AUDIO_BECOMING_NOISY", поэтому я попробовал!Получение отсоединения наушников занимает слишком много времени

Теоретически это работает, НО время получения занимает слишком много времени. Музыка все еще воспроизводится в течение 3-5 секунд, прежде чем она действительно остановится. Это не будет приемлемо для пользователя.

Как другие devolopers могут приостановить его в миллисекундах? Есть ли лучшие Soloutions?

Мой 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"/> , который реально не имеет никакого значения

Спасибо за вашу помощь, ребята!

ответ

0

Чтобы знать, когда пользователь отключит свои наушники вы должны слушать действие ACTION_HEADSET_PLUG и проверить state дополнительно:

Broadcast Действие: Проводная гарнитура подключена или отсоединен.

Намерения будет иметь следующие дополнительные значения:

  • состояния - 0 для отсоединена, 1 для заглушен.
  • названия - тип гарнитуры, человек читаемой строка
  • микрофон - 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 
       } 
      } 
     } 
    } 
} 
+0

Спасибо за вашу помощь , НО как-то я не получаю трансляцию. Я использовал «» в своем намерении фильтра Получателя и использовал разрешение «" , Почему я не могу получить трансляцию? (Я также отлаживал его проверку) –

+0

Хорошо, я узнал, что мне нужно регистрировать его динамически. Так что это невозможно сделать, зарегистрировав его манифестом. Спасибо, Маттиа! –