2012-07-30 14 views
7

Ciao sto lavorando su un'applicazione che genera un evento quando la cuffia viene rimossa dal telefono cellulare. Ho creato un ricevitore di broadcast con ricevere MetodoBroadcastReceiver per scollegare la cuffia

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

    } 

chiamata a questo metodo come segue

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

anche io ho registrare questo si manifestano come

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

e il permesso

Ma questo non funziona può tu mi guidi attraverso questo?

+0

Ragazzi comuni nessuno mi può guidare? – Sumit

+1

[Controlla questo] (http: // StackOverflow.it/questions/4092438/intent-action-headset-plug-is-received-when-activity-starts) –

+0

[Questo funziona] (http://stackoverflow.com/a/6366238/726863) –

risposta

0

Si consiglia di attivare o disattivare il punto di interruzione all'interno di Ricevi e selezionare la modalità di debug che tipo di evento si riceve quando si collega il dispositivo portatile. Quindi inserire questo evento anziché Intent.ACTION_HEADSET_PLUG Grazie.

+0

Penso che il destinatario della trasmissione non stia registrando. :( – Sumit

0

Suppongo che ci sia un problema con la registrazione del ricevitore di trasmissione con il rispettivo intento. Fare riferimento a questo post e vedere se funziona.

Eccezione nel mio 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) 

Questo è come ho registrato un ricevitore di broadcast in uno dei miei progetti:

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

risposta alla mia domanda era questa .. Grazie per la risposta ognuno

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

E 'punto delicato ma è possibile utilizzare BroadCast come la seguente funziona bene con me nella tua attività

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

e onResume() registrati Metodo tua Broadcast

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

quindi dichiara il tuo BroadCast nella tua attività

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

Spero sia d'aiuto ,,,

Problemi correlati