2013-02-05 21 views
5

Devo rilevare se l'auricolare cablato collegato dispone o meno di microfono.Rileva se la cuffia dispone di microfono

Posso verificare se un auricolare è collegato utilizzando isWiredHeadSetOn(), ma per il microfono non sembra essere un tale metodo nella classe AudioManager.

Ho trovato alcuni suggerimenti utilizzando ACTION_HEADSET_PLUG, ma sono interessato a scoprire queste informazioni anche se l'auricolare è stato collegato prima di aprire la mia applicazione, questo evento non verrà attivato durante la vita della mia app.

Qualche idea riguardo questo problema? Grazie in anticipo.

+0

perché avete bisogno di esso? spetta all'utente sapere dove si trova il microfono. – njzk2

+0

Perché voglio collegare un flash tramite jack audio e questo mi aiuta a differenziare tra 2 tipi di flash. – niculare

+1

un flash nella presa audio? possiamo farlo ? – njzk2

risposta

12

UPDATE: Vai avanti e registrare ACTION_HEADSET_PLUG nella vostra attività di onResume(). Se l'utente ha mai collegato/spento l'auricolare dopo l'avvio, la piattaforma fornirà lo stato più recente all'attività al momento della ripresa.

Dopo codice di prova ha funzionato:

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

Grazie! Non sapevo che onReceive() viene chiamato anche all'avvio dell'attività – niculare

+1

Non sono le trasmissioni di connessione dispositivo del tipo 'FLAG_RECEIVER_REGISTERED_ONLY'? Cioè "quando si invia una trasmissione vengono chiamati solo ricevitori registrati - nessun componente BroadcastReceiver verrà lanciato" - o come descritto più chiaro da Dianne Hackborn: "Viene dato solo a coloro che chiamano registerReceiver e non inviati ai destinatari dichiarati nei manifesti." – Michael

+0

@ Michael, avevi ragione. Aggiornato la mia risposta sopra. – ozbek

Problemi correlati