2013-05-06 31 views
13

Nie mogę znaleźć sposobu, aby dowiedzieć się na Androidzie, czy słuchawki są podłączone. Znalazłem różne rozwiązania, ale zawsze wydają się zwracać fałsz. Jedyną rzeczą, która wydaje się działać poprawnie jest BroadcastReceiver, ale to nie jest to, czego potrzebuję:Sprawdź, czy słuchawki są podłączone

Muszę tylko coś takiego

if(headphones plugged in) { 
} 

Czy istnieje taka funkcja? Czy wymaga pewnych specjalnych uprawnień?

+0

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

+0

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

Odpowiedz

27

Można użyć tego kodu do sprawdzania, czy zestaw słuchawkowy jest podłączony

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

(nie martw się o amortyzację, to wciąż użyteczny dla TYLKO sprawdzenie, czy zestaw słuchawkowy jest podłączony).

I trzeba <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

Dostępne w Androidzie 2.0 +

+0

zezwolenia. to musi być powód, dla którego nie zadziałało za pierwszym razem, gdy próbowałem tego rozwiązania. czy istnieje sposób, aby to zrobić bez angażowania kontekstu? – dosse91214

+0

@ dosse91214 co jest nie tak z pozwoleniem? Jeśli nie dodasz uprawnienia, funkcja isWiredHeadsetOn() zawsze zwróci wartość false. – Naskov

+0

tak, właśnie o to mi chodziło. za pierwszym razem, gdy wypróbowałem to rozwiązanie, nie wspomniałem, że musiałem dodać pozwolenie. dzięki: D – dosse91214

8

użyć tego kodu ...

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

Metoda isWiredHeadsetOn() z typu AudioManager jest przestarzała – zionpi

0

AudioManager.isWiredHeadsetOn() to ODRADZANA. Tak, trzeba użyć metody AudioManager.getDevices() Zamiast:

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; 
    } 
Powiązane problemy