android - porque - mis audifonos bluetooth no se conectan con mi celular
¿Cómo detectar cuando un usuario conecta auriculares en un dispositivo Android?(Opuesto a ACTION_AUDIO_BECOMING_NOISY) (2)
Estoy desarrollando una aplicación que tiene el siguiente requisito: si hay un auricular conectado y el usuario lo quita, necesito silenciar todas las transmisiones. Para hacer eso, necesito escuchar AudioManager.ACTION_AUDIO_BECOMING_NOISY
Broadcast. ¡Esto esta bien! No hay problema aquí.
Pero cuando el usuario vuelve a enchufar el auricular , necesito desactivar el dispositivo. Pero no hay una transmisión opuesta de AudioManager.ACTION_AUDIO_BECOMING_NOISY
. No puedo saber cuándo los auriculares están enchufados nuevamente.
Una solución es ver periódicamente si AudioManager.isWiredHeadsetOn()
es true
pero esta no parece ser una buena solución para mí.
¿Hay alguna forma de detectar cuándo el usuario conecta un auricular en el dispositivo?
Editado : Intenté usar Intent.ACTION_HEADSET_PLUG
esta manera, pero no funcionó .
En el manifest.xml puse:
<receiver android:name=".MusicIntentReceiver" >
<intent-filter>
<action android:name="android.intent.action.HEADSET_PLUG" />
</intent-filter>
</receiver>
Y aquí está el código de mi MusicIntentReceiver.java
:
public class MusicIntentReceiver extends BroadcastReceiver {
public void onReceive(Context ctx, Intent intent) {
AudioManager audioManager = (AudioManager)ctx.getSystemService(Context.AUDIO_SERVICE);
if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
Log.d("Let''s turn the sound on!");
//other things to un-mute the streams
}
}
}
¿Alguna otra solución para probar?
¿Qué tal esta llamada: http://developer.android.com/reference/android/content/Intent.html#ACTION_HEADSET_PLUG que encontré en Droid Incredible Headphones Detection ?
El código actualizado que veo en su pregunta ahora no es suficiente. Esa transmisión ocurre cuando el estado conectado cambia y, a veces, cuando no lo hace, de acuerdo con Intent.ACTION_HEADSET_PLUG se recibe cuando comienza la actividad, así que escribo:
package com.example.testmbr;
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private MusicIntentReceiver myReceiver;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceiver = new MusicIntentReceiver();
}
@Override public void onResume() {
IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
registerReceiver(myReceiver, filter);
super.onResume();
}
private class MusicIntentReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
int state = intent.getIntExtra("state", -1);
switch (state) {
case 0:
Log.d(TAG, "Headset is unplugged");
break;
case 1:
Log.d(TAG, "Headset is plugged");
break;
default:
Log.d(TAG, "I have no idea what the headset state is");
}
}
}
}
@Override public void onPause() {
unregisterReceiver(myReceiver);
super.onPause();
}
}
La llamada a AudioManager.isWiredHeadsetOn (), que anteriormente he recomendado, resulta obsoleta desde la API 14, por lo que la sustituí por la extracción del estado del intento de difusión. Es posible que haya múltiples emisiones para cada conexión o desconexión, quizás debido al rebote de contacto en el conector.
No he trabajado con esto, pero si estoy leyendo los documentos correctamente, ACTION_AUDIO_BECOMING_NOISY
es para ACTION_AUDIO_BECOMING_NOISY
a una aplicación que la entrada de audio podría comenzar a escuchar la salida de audio. Cuando desenchufe el auricular, el micrófono del teléfono podría comenzar a levantar el altavoz del teléfono, de ahí el mensaje.
Por otro lado, ACTION_SCO_AUDIO_STATE_UPDATED
está diseñado para ACTION_SCO_AUDIO_STATE_UPDATED
cuando hay un cambio en el estado de conexión de un dispositivo bluetooth.
Ese segundo es probablemente lo que quieres escuchar.