2012-04-02 1 views
4

Кто-нибудь знает, как я могу определить, отключен ли разъем для наушников на устройстве на Android? У меня есть музыкальный проигрыватель, и мне нужно приостановить музыку, когда наушники отключены. Самое близкое, что я нашел, это использовать AudioManager. Это правильное направление?прослушиватель наушников для наушников Android

ответ

11

Это то, что я в конечном итоге делает:

private class NoisyAudioStreamReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) { 
      pause(); 
     } 
    } 
} 

private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY); 

private void startPlayback() { 
    registerReceiver(myNoisyAudioStreamReceiver(), intentFilter); 
} 

private void stopPlayback() { 
    unregisterReceiver(myNoisyAudioStreamReceiver); 
} 

Я нашел ответ на эту ссылку: http://developer.android.com/training/managing-audio/audio-output.html

+0

Хотя я не имею полную информацию о том, как сделать это, я полагаю, вы можете используйте «ACTION_HEADSET_PLUG» в чем-то рядом: приемник IntentFilterFilter = новый IntentFilter (Intent.ACTION_HEADSET_PLUG); Приемник HeadsetStateReceiver = новый headsetStateReceiver(); registerReceiver (this.toggleDeviceConnectionState(), receiverFilter); – shim

+0

@shim Просто проверьте документацию о намерениях (https://developer.android.com/reference/android/content/Intent.html#ACTION_HEADSET_PLUG), и вы правы: Да, этот фильтр намерений существует, но из API21 + они предложите вместо этого использовать AudioManager. Я думаю, причина в том, что BECOMING_NOISY также принимает во внимание другие виды устройств вывода звука (например, Bluetooth-гарнитуру), например. если Bluetooth-гарнитура отключена, он также должен сделать эту трансляцию. Я пытаюсь это сейчас, но для обратной совместимости я предполагаю, что оба метода должны быть реализованы ... –