Проверьте, подключены ли наушники
Я не могу найти способ узнать на Android, если наушники подключены. Я нашел различные решения, но они всегда, кажется, возвращают false. Единственное, что, кажется, работает правильно, это BroadcastReceiver
, но это не то, что мне нужно:
Мне просто нужно что-то подобное
if(headphones plugged in) {
}
Есть ли такая функция? Требуются ли какие-то особые разрешения?
4 ответа
Вы можете использовать этот код для проверки, подключена ли гарнитура
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.isWiredHeadsetOn();
(Не беспокойтесь об устаревании, его можно использовать ТОЛЬКО для проверки, подключена ли гарнитура.)
А тебе нужно <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
Доступно в Android 2.0 +
AudioManager.isWiredHeadsetOn() УСТАРЕЛО. Итак, вам нужно использовать метод AudioManager.getDevices():
private boolean isHeadphonesPlugged(){
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
AudioDeviceInfo[] audioDevices = audioManager.getDevices(AudioManager.GET_DEVICES_ALL);
for(AudioDeviceInfo deviceInfo : audioDevices){
if(deviceInfo.getType()==AudioDeviceInfo.TYPE_WIRED_HEADPHONES
|| deviceInfo.getType()==AudioDeviceInfo.TYPE_WIRED_HEADSET){
return true;
}
}
return false;
}
Используйте этот код...
AudioManager am1 = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
Log.i("WiredHeadsetOn = ", am1.isWiredHeadsetOn()+"");
Log.i("MusicActive = ", am1.isMusicActive()+"");
Log.i("SpeakerphoneOn = ", am1.isSpeakerphoneOn()+"");
Используйте API Google Awareness
Это очень богато, чтобы обеспечить контекстное чувство.
audioManager.isWiredHeadsetOn()
устарело в соответствии с приведенным ниже кодом из android.media.AudioManager
/**
* Checks whether a wired headset is connected or not.
* <p>This is not a valid indication that audio playback is
* actually over the wired headset as audio routing depends on other conditions.
*
* @return true if a wired headset is connected.
* false if otherwise
* @deprecated Use {@link AudioManager#getDevices(int)} instead to list available audio devices.
*/
public boolean isWiredHeadsetOn() {
if (AudioSystem.getDeviceConnectionState(DEVICE_OUT_WIRED_HEADSET,"")
== AudioSystem.DEVICE_STATE_UNAVAILABLE &&
AudioSystem.getDeviceConnectionState(DEVICE_OUT_WIRED_HEADPHONE,"")
== AudioSystem.DEVICE_STATE_UNAVAILABLE &&
AudioSystem.getDeviceConnectionState(DEVICE_OUT_USB_HEADSET, "")
== AudioSystem.DEVICE_STATE_UNAVAILABLE) {
return false;
} else {
return true;
}
}
поэтому нам нужно использовать AudioManager#getDevices
метод, как показано ниже
private boolean isWiredHeadsetOn(){
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
AudioDeviceInfo[] audioDevices = audioManager.getDevices(AudioManager.GET_DEVICES_ALL);
for(AudioDeviceInfo deviceInfo : audioDevices){
if(deviceInfo.getType()==AudioDeviceInfo.TYPE_WIRED_HEADPHONES
|| deviceInfo.getType()==AudioDeviceInfo.TYPE_WIRED_HEADSET){
return true;
}
}
return false;
}