2016-05-31 14 views
1

Ich möchte überprüfen, ob ein Headset ein Mikrofon hat oder nicht. Momentan verwende ich diesen Broadcast-Empfänger-Code, aber ich bin mir nicht sicher, ob es korrekt ist oder nicht.Android - So erkennen Sie, ob ein Headset ein Mikrofon hat

public class HeadSetMicrophoneStateReceiver extends BroadcastReceiver { 

    private String pluggedState = null; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) { 
      int state = intent.getIntExtra("microphone", -1); 
      switch (state) { 
       case 0: 
        //Headset does not have a Microphone 
        pluggedState = "0"; 
        break; 
       case 1: 
        //Headset have a Microphone 
        pluggedState = "1"; 
        break; 
       default: 
        pluggedState = "I have no idea what the headset state is"; 
      } 
      EventBus.getDefault().post(new HeadSetMicrophoneEvent(pluggedState)); 
     } 
    } 
} 

Bitte helfen Sie mir.

Antwort

1

Diese Methode gibt zurück, ob das Mikrofon verfügbar ist. Wenn es nicht verfügbar ist, wird eine Ausnahme abgefangen.

public static boolean getMicrophoneAvailable(Context context) { 
    MediaRecorder recorder = new MediaRecorder(); 
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
    recorder.setOutputFile(new File(context.getCacheDir(), "MediaUtil#micAvailTestFile").getAbsolutePath()); 
    boolean available = true; 
    try { 
     recorder.prepare(); 
    } 
    catch (IOException exception) { 
     available = false; 
    } 
    recorder.release(); 
    return available; 
} 
+0

Ist diese Prüfung für das Mikrofon des Telefons oder für das Mikrofon des Headsets? – Vicky

+0

@Vicky das ist etwas, was schwierig ist, wenn Mikrofon nicht verfügbar ist, wird es durch Fehler und return false sonst zurück –

+0

OK, aber ist es für das Mikrofon des Telefons oder für das Mikrofon des Headsets? – Vicky

0

try folgenden Code

ackage 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 MyActivity 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("MyActivity ", "state: " + intent.getIntExtra("state", -1)); 
      Log.d("MyActivity ", "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

Ich benutze den gleichen Code, 'intent.getIntExtra (" Mikrofon ", -1)' gibt immer 1 zurück. Was bedeutet das? – Vicky

+0

Wenn ein Mikrofon vorhanden ist, dann intent.getIntExtra ("Mikrofon", -1) return 1 andernfalls 0; – mdDroid

+0

Aber selbst wenn das Headset nicht eingesteckt ist, gibt es immer noch 1 zurück. Das ist, worüber ich verwirrt bin. – Vicky

Verwandte Themen