resetear - Detecta si un auricular está conectado a un dispositivo Android o no.
mis audifonos bluetooth no aparece en dispositivos de reproduccion (4)
¿Cómo puedo determinar si un auricular está conectado a un dispositivo Android o no?
Esto debería ayudarte: http://developer.android.com/reference/android/content/Intent.html#ACTION_HEADSET_PLUG
Puedes usar el receptor de transmisión.
Entonces, puedes escribir este código en "AndroidManifest.xml"
<receiver android:name="com.juno.brheadset.HeadsetStateReceiver">
<intent-filter>
<action android:name="android.intent.action.HEADSET_PLUG"/>
</intent-filter>
</receiver>-->
Pero, esto no funciona. Cuando OS envía este intento de "HEADSET_PLUG", el sistema operativo establece el indicador "Intent.FLAG_RECEIVER_REGISTERED_ONLY". Por lo tanto, debe escribir el siguiente código en la clase Activity o Service en lugar de "AndroidManifest".
public class BRHeadsetActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
HeadsetStateReceiver receiver = new HeadsetStateReceiver();
registerReceiver( receiver, receiverFilter );
}
Espero que este artículo te ayude. ¡Adiós!
Esta es la parte de "HeadsetObserver.java", Android SDK Source.
private final void sendIntent(int headset, int headsetState, int prevHeadsetState, String headsetName) {
if ((headsetState & headset) != (prevHeadsetState & headset)) {
// Pack up the values and broadcast them to everyone
Intent intent = new Intent(Intent.ACTION_HEADSET_PLUG);
**intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);**
int state = 0;
int microphone = 0;
if ((headset & HEADSETS_WITH_MIC) != 0) {
microphone = 1;
}
if ((headsetState & headset) != 0) {
state = 1;
}
intent.putExtra("state", state);
intent.putExtra("name", headsetName);
intent.putExtra("microphone", microphone);
if (LOG) Slog.v(TAG, "Intent.ACTION_HEADSET_PLUG: state: "+state+" name: "+headsetName+" mic: "+microphone);
// TODO: Should we require a permission?
ActivityManagerNative.broadcastStickyIntent(intent, null);
}
}
AudioManager.isWiredHeadsetOn()
siempre devuelve false
porque requiere permisos de usuario MODIFY_AUDIO_SETTINGS
.
Pasé varios días mientras encontraba respuesta. No hay información sobre esto en la documentación oficial. Y esta BugTracker
ya registrada en BugTracker
.
Cuando dices "auricular", ¿te refieres a "auricular con cable"? Si es así, hay una intención de detectar si uno está o no enchufado o desconectado: ACTION_HEADSET_PLUG
.
Para verificar el estado, puede usar AudioManager.isWiredHeadsetOn()
, aunque eso puede devolver false si también hay un auricular bluetooth, y el audio se enruta a eso en su lugar.