2013-05-06 16 views
13

Ich kann nicht scheinen, auf Android zu finden, wenn die Kopfhörer eingesteckt sind. Ich fand verschiedene Lösungen, aber sie scheinen immer falsch zurückzugehen. Das einzige, was richtig zu funktionieren scheint, ist eine BroadcastReceiver, aber das ist nicht das, was ich brauche:Überprüfen Sie, ob Kopfhörer eingesteckt sind

ich so etwas wie dieses

if(headphones plugged in) { 
} 

Gibt es eine solche Funktion brauchen nur? Benötigt es einige spezielle Berechtigungen?

+0

http://stackoverflow.com/questions/6249023/detecting-whether-a-headset-is-plugged-into-an-android-device-or -nicht –

+0

http://stackoverflow.com/questions/13610258/how-to-detect-when-a-user-plugs-headset-on-android-device-opposite-of-action-a –

Antwort

27

Sie diesen Code für die Überprüfung verwenden können, wenn das Headset in

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
audioManager.isWiredHeadsetOn(); 

(Keine Sorge über die Geringschätzung, es für NUR Überprüfung noch verwendbar ist, wenn das Headset angesteckt werden.) Angeschlossen ist

Und Sie brauchen <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

erhältlich in Android 2.0 +

dieser Code
+0

die Erlaubnis. Das muss sein, warum es beim ersten Mal nicht geklappt hat, als ich diese Lösung ausprobiert habe. Gibt es eine Möglichkeit, dies zu tun, ohne den Kontext einzubeziehen? – dosse91214

+0

@ dose91214 Was ist mit der Erlaubnis falsch? Wenn Sie die Berechtigung nicht hinzufügen, gibt isWiredHeadsetOn() immer false zurück. – Naskov

+0

ja das ist was ich meinte. Das erste Mal, als ich diese Lösung ausprobierte, erwähnte ich nicht, dass ich die Erlaubnis hinzufügen musste. Vielen Dank: D – dosse91214

8

Verwenden ...

AudioManager am1 = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
Log.i("WiredHeadsetOn = ", am1.isWiredHeadsetOn()+""); 
Log.i("MusicActive = ", am1.isMusicActive()+""); 
Log.i("SpeakerphoneOn = ", am1.isSpeakerphoneOn()+""); 
+0

Die Methode isWiredHeadsetOn() vom Typ AudioManager ist veraltet – zionpi

0

AudioManager.isWiredHeadsetOn() ist DEPECIERT. So , müssen Sie AudioManager.getDevices() Methode verwenden, anstatt:

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; 
    } 
Verwandte Themen