2012-07-30 14 views
7

Hola, estoy trabajando en una aplicación que genera un evento cuando los auriculares se eliminan del teléfono móvil. He creado un receptor de radiodifusión con recibir métodoBroadcastReceiver para desconectar auriculares

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 
      } 
     }   

    } 

llamada a este método de la siguiente manera

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

También he registra esto en manifestarse como

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

y el permiso

Pero esto no funciona puede ¿Me guiaste a través de esto?

+0

¿Chicos comunes nadie podría guiarme? – Sumit

+1

[Verifique esto] (http: // stackoverflow.com/questions/4092438/intent-action-headset-plug-is-received-when-activity-starts) –

+0

[Esto funciona] (http://stackoverflow.com/a/6366238/726863) –

Respuesta

0

Le recomiendo que active el punto de interrupción en onReciba y compruebe en el modo de depuración qué tipo de evento está recibiendo al conectar su dispositivo. Y luego inserte este evento en lugar de Intent.ACTION_HEADSET_PLUG Gracias.

+0

Creo que el receptor de difusión no se está registrando. – Sumit

0

Supongo que hay un problema con el registro del receptor de difusión con la intención respectiva. Consulte este post y vea si funciona.

Excepción en mi Logcat

07-30 12:41:01.448: E/ActivityThread(321): Activity com.example.test.MainActivity has leaked IntentReceiver [email protected] 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 [email protected] 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 me registré un receptor de radiodifusió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> 
1

respuesta a mi pregunta era este .. gracias por responder 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); 

16

su punto complicado pero se puede utilizar BroadCast que la de los que trabajan bien conmigo en su Actividad

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

y en onResume() Método registrar su difusión

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

a continuación, 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 ayuda ,,,

Cuestiones relacionadas