Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


BroadcastReceiver para desconectar el auricular

Hola estoy trabajando en una aplicación que genera un evento cuando los auriculares se quitan del teléfono móvil. He creado un receptor de difusión con método de recepción como

public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); Log.i("Broadcast Receiver", "Hello"); if( (action.compareTo(Intent.ACTION_HEADSET_PLUG)) == 0) //if the action match a headset one { int headSetState = intent.getIntExtra("state", 0); //get the headset state property int hasMicrophone = intent.getIntExtra("microphone", 0);//get the headset microphone property if( (headSetState == 0) && (hasMicrophone == 0)) //headset was unplugged & has no microphone { //do whatever } } } 

Llamar a este método como sigue

  IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); HeadSetBroadCastReceiver receiver = new HeadSetBroadCastReceiver(); registerReceiver( receiver, receiverFilter ); 

También tengo que registrar esto en manifiesto como

  <receiver android:name=".HeadsetBroadCastReceiver"> <intent-filter> <action android:name="android.intent.action.ACTION_HEADSET_PLUG"/> </intent-filter> </receiver> 

Y permiso

Pero esto no funciona ¿alguien puede guiarme a través de esto?

5 Solutions collect form web for “BroadcastReceiver para desconectar el auricular”

El problema aquí es que esta emisión tiene el indicador Intent.FLAG_RECEIVER_REGISTERED_ONLY establecido. Esto significa que los receptores manifiestos no captarán eso. Aquí hay una explicación completa.

Es un punto difícil pero puedes usar BroadCast como el siguiente trabajando bien conmigo en tu actividad

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myReceiver = new HeadSetReceiver(); } 

Y en onResume () Método registre su difusión

 public void onResume() { IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); registerReceiver(myReceiver, filter); super.onResume(); } 

Luego declare su BroadCast en su actividad

 private class HeadSetReceiver 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 unplugged"); break; case 1: Log.d(TAG, "Headset plugged"); break; } } } } 

Espero que sea de ayuda ,,,

Te recomiendo cambiar el punto de interrupción dentro deReceber y comprobar en el modo de depuración qué tipo de evento está recibiendo cuando se conecta el dispositivo del teléfono. A continuación, inserte este evento en lugar de Intent.ACTION_HEADSET_PLUG Gracias.

Supongo que hay un problema con el registro de receptor de difusión con la intención respectiva. Consulte esta publicación y ver si funciona.

Excepción en mi logcat

 07-30 12:41:01.448: E/ActivityThread(321): Activity com.example.test.MainActivity has leaked IntentReceiver com.example.test.BroadcastsHandler@44ee81d8 that was originally registered here. Are you missing a call to unregisterReceiver()? 07-30 12:41:01.448: E/ActivityThread(321): android.app.IntentReceiverLeaked: Activity com.example.test.MainActivity has leaked IntentReceiver com.example.test.BroadcastsHandler@44ee81d8 that was originally registered here. Are you missing a call to unregisterReceiver()? 07-30 12:41:01.448: E/ActivityThread(321): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher.<init>(ActivityThread.java:939) 07-30 12:41:01.448: E/ActivityThread(321): at android.app.ActivityThread$PackageInfo.getReceiverDispatcher(ActivityThread.java:734) 07-30 12:41:01.448: E/ActivityThread(321): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:791) 07-30 12:41:01.448: E/ActivityThread(321): at android.app.ContextImpl.registerReceiver(ContextImpl.java:778) 07-30 12:41:01.448: E/ActivityThread(321): at android.app.ContextImpl.registerReceiver(ContextImpl.java:772) 07-30 12:41:01.448: E/ActivityThread(321): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318) 07-30 12:41:01.448: E/ActivityThread(321): at com.example.test.MainActivity.onCreate(MainActivity.java:19) 07-30 12:41:01.448: E/ActivityThread(321): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 07-30 12:41:01.448: E/ActivityThread(321): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 07-30 12:41:01.448: E/ActivityThread(321): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 07-30 12:41:01.448: E/ActivityThread(321): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 07-30 12:41:01.448: E/ActivityThread(321): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 07-30 12:41:01.448: E/ActivityThread(321): at android.os.Handler.dispatchMessage(Handler.java:99) 07-30 12:41:01.448: E/ActivityThread(321): at android.os.Looper.loop(Looper.java:123) 07-30 12:41:01.448: E/ActivityThread(321): at android.app.ActivityThread.main(ActivityThread.java:4627) 07-30 12:41:01.448: E/ActivityThread(321): at java.lang.reflect.Method.invokeNative(Native Method) 07-30 12:41:01.448: E/ActivityThread(321): at java.lang.reflect.Method.invoke(Method.java:521) 07-30 12:41:01.448: E/ActivityThread(321): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 07-30 12:41:01.448: E/ActivityThread(321): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 07-30 12:41:01.448: E/ActivityThread(321): at dalvik.system.NativeStart.main(Native Method) 

Así es como he registrado un receptor de difusión en uno de mis proyectos:

OnCreate:

 $////////////////broadcast reciever///////////// IntentFilter iFilter = new IntentFilter(); iFilter.addAction(handler.ACTION); iFilter.addCategory(Intent.CATEGORY_DEFAULT); handler = new HandleTime(); registerReceiver(handler, iFilter); 

Manifest.xml:

 <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

Respuesta a mi pregunta fue esta .. Gracias por responder a todos y cada uno

 class NoisyAudioStreamReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) { // pause(); Log.d("Mesage","Unplug"); Toast.makeText(context, "Heello",Toast.LENGTH_LONG).show(); } } } IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY); NoisyAudioStreamReceiver receiver = new NoisyAudioStreamReceiver(); registerReceiver( receiver, intentFilter ); 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.