¿Cómo puedo determinar si un auricular está conectado a un dispositivo Android o no?Detectando si un auricular está conectado a un dispositivo Android o no.
Respuesta
Cuando dices "auricular", ¿te refieres a "auricular con cable"? Si es así, hay una intención de detectar si uno está enchufado o desenchufado: ACTION_HEADSET_PLUG
.
Para verificar el estado, puede usar AudioManager.isWiredHeadsetOn()
, aunque eso puede devolver falso si también hay un auricular bluetooth, y el audio se enruta a eso en su lugar.
Hola Mike, ¿Qué debo hacer si alguien usa un auricular Blutooth? –
AudioManager.isWiredHeadsetOn() siempre parece devolver falso (probado en varios dispositivos Gingerbread), con o sin un auricular conectado. Si puede proporcionar un ejemplo de código de trabajo, sería genial. –
@ChadSchultz Necesita agregar el permiso MODIFY_AUDIO_SETTINGS en manifiesto ... y solo devolverá el estado correcto. –
Esto debería ayudarle a: http://developer.android.com/reference/android/content/Intent.html#ACTION_HEADSET_PLUG
Puede utilizar el receptor de radiodifusión.
así, es posible 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>-->
embargo, 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);
}
}
-ccromance ¿me puede explicar su código? – Sumit
@Sumit Lo siento. Vi tu repetición ahora. ¿Qué pasa con mi código puedo explicar por ti? :) – cmcromance
@Sumit Ok. Creo que no entiendes esto. Si agrega "FLAG_RECEIVER_REGISTERED_ONLY" al intento de transmisión, puedo recibir su transmisión cuando solo hago "registerReceiver (...)" en el código que no está en 'AndroidManifest.xml'. – cmcromance
AudioManager.isWiredHeadsetOn()
siempre volver false
, ya que requiere el permiso del usuario-MODIFY_AUDIO_SETTINGS
.
Pasé varios días mientras encontraba respuesta. No hay información sobre esto en la documentación oficial. Y este bug
ya registrado en BugTracker
.
- 1. use un dispositivo Android como un auricular para otro dispositivo
- 2. ¿Cómo puedo verificar si un dispositivo Android está conectado a la web?
- 3. backbone.js - manejo si un usuario está conectado o no
- 4. Detectando si un dispositivo Android es un teléfono o una tableta con javascript
- 5. ¿Cómo saber a qué puerto está conectado un dispositivo USB?
- 6. Detecta falta de auricular (solo altavoz) en un dispositivo Android
- 7. Compruebe si el socket está conectado o no
- 8. Detecta cuando un dispositivo USB está conectado en C
- 9. ¿Cómo determinar si un dispositivo Android está rooteado programáticamente?
- 10. Detectando que el dispositivo está enchufado
- 11. ¿Comprobar WiFi y GPS está conectado o no en Android?
- 12. ¿Detecta si un usuario web está actualmente conectado a Google?
- 13. Enviar datos a un servidor cuando el dispositivo está conectado a Internet
- 14. creando un usuario en Active Directory: un dispositivo conectado al sistema no está funcionando
- 15. ¿Transmitir si un dispositivo bluetooth se está conectando/desconectando?
- 16. ¿Cómo hacer un teléfono Android como un auricular bluetooth?
- 17. Detectando si el caché de un navegador está lleno
- 18. Dispositivo USB conectado
- 19. Detectando si el monitor está apagado
- 20. ¿Cómo encontrar qué dispositivo está conectado a un puerto serie USB en Linux usando C?
- 21. ¿Cómo verificar si un socket está conectado/desconectado en C#?
- 22. ¿Cómo comprobar si NFC está habilitado o no en Android?
- 23. Detectando si un navegador está en modo de pantalla completa
- 24. Detectando si un programa ya está instalado con NSIS
- 25. ¿Qué es exactamente un dispositivo conectado con BLE en iOS?
- 26. Determinar en script php si está conectado a internet?
- 27. Ocultar facepile si el usuario no está conectado o no hay amigos conectados al sitio
- 28. dispositivo Cómo saber está conectado a Wi-Fi o 3G, programáticamente
- 29. ¿Cómo puedo saber si mi iPhone/iPad está conectado a 2G o 3G?
- 30. ¿Cómo verificar si un complemento jQuery UI está conectado a un elemento?
Estoy desarrollando una Aplicación ... Y necesito saberlo con certeza ... El usuario también puede hacer trampa si le pregunto –
He editado su pregunta, si no es lo que quiere preguntar, por favor corrija eso. – Mudassir
@Mudassir Gracias por corregirlo :) –