2013-02-05 7 views
5

Potrzebuję wykryć, czy podłączony zestaw słuchawkowy ma mikrofon, czy nie.Wykrywanie, czy zestaw słuchawkowy ma mikrofon

Mogę sprawdzić, czy zestaw słuchawkowy jest podłączony za pomocą isWiredHeadSetOn(), ale mikrofon nie wydaje się być taką metodą w klasie AudioManager.

Znalazłem kilka sugestii przy użyciu ACTION_HEADSET_PLUG, ale jestem zainteresowany, aby dowiedzieć się tych informacji, nawet jeśli zestaw słuchawkowy został podłączony przed otworzeniem mojej aplikacji, to wydarzenie nie zostanie wyzwolone w trakcie trwania mojej aplikacji.

Wszelkie pomysły dotyczące tego problemu? Z góry dziękuję.

+0

dlaczego jest to potrzebne? to zależy od użytkownika, aby wiedzieć, gdzie jest mikrofon. – njzk2

+0

Ponieważ chcę podłączyć lampę błyskową przez gniazdo audio, co pomaga mi rozróżnić 2 rodzaje lamp błyskowych. – niculare

+1

lampa błyskowa w gnieździe audio? możemy to zrobić ? – njzk2

Odpowiedz

12

UPDATE: Śmiało i zarejestrować ACTION_HEADSET_PLUG w swoją aktywność na onResume(). Jeśli użytkownik kiedykolwiek wyłączył/wyłączył swój zestaw słuchawkowy po uruchomieniu, platforma dostarczy najnowszy stan do aktywności po wznowieniu.

następujący kod testu pracował:

package com.example.headsetplugtest; 

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.util.Log; 

public class HeadSetPlugIntentActivity extends Activity { 

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      final String action = intent.getAction(); 
      if (Intent.ACTION_HEADSET_PLUG.equals(action)) { 
       Log.d("HeadSetPlugInTest", "state: " + intent.getIntExtra("state", -1)); 
       Log.d("HeadSetPlugInTest", "microphone: " + intent.getIntExtra("microphone", -1)); 
      } 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); 
     getApplicationContext().registerReceiver(mReceiver, filter); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 

     getApplicationContext().unregisterReceiver(mReceiver); 
    } 
} 
+0

Dziękujemy! Nie wiedziałem, że onReceive() jest również wywoływana, gdy aktywność jest uruchamiana – niculare

+1

Czy nie są transmisje połączeń urządzenia typu "FLAG_RECEIVER_REGISTERED_ONLY"? To znaczy. "podczas wysyłania audycji zostaną wyłaniani tylko zarejestrowani odbiorcy - nie zostaną uruchomione żadne komponenty BroadcastReceiver" - lub jak opisano bardziej szczegółowo przez Dianne Hackborn: "Dostarcza się tylko tym, którzy nazywają rejestrReceiver, a nie wysyłają do odbiorców zadeklarowanych w manifestach". – Michael

+0

@Michael, miałeś rację. Zaktualizowałem moją odpowiedź powyżej. – ozbek