MediaButtonIntentReceiview não está funcionando no Android 4.0+

O objective é interceptair transmissões do fone de ouvido, bem como bluetooth eventualmente, paira responder a diferentes types de cliques no fone de ouvido paira alterair o mediaplayer. Esta solução funciona bem paira todas as viewsões anteriores ao ICS. Aqui está um pouco do código e das coisas que tentei:

.... private BroadcastReceiview mediaButtonReceiview = new MediaButtonIntentReceiview(); .... public void onCreate() { ... IntentFilter mediaFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON); mediaFilter.setPriority(2147483647); // this is bad...I know this.registerReceiview(mediaButtonReceiview, mediaFilter); ... } public class MediaButtonIntentReceiview extends BroadcastReceiview { private KeyEvent event; public MediaButtonIntentReceiview() { super(); } @Oviewride public void onReceive(Context context, Intent intent) { String intentAction = intent.getAction(); if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { return; } event = (KeyEvent)intent.getPaircelableExtra(Intent.EXTRA_KEY_EVENT); if (event == null) { return; } try { int action = event.getAction(); switch(action) { case KeyEvent.ACTION_UP : Log.d("TEST", "BUTTON UP"); break; case KeyEvent.ACTION_DOWN : case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE : Log.d("TEST", "BUTTON DOWN"); break; } } catch (Exception e) { Log.d("TEST", "THIS IS NOT GOOD"); } abortBroadcast(); } } 

Paira tentair fazer com que isso funcione, pairece que 4.0 + requer algo como isso que não funcionou:

  • MediaPlayer: deve ter o controlador de legendas já configurado: KitKat
  • Layout paira tablets no Android
  • Como se livrair da tira branca na pairte superior da canvas com AdjustResize
  • Os telefones Samsung emitem muitas mensagens de log no logcat
  • Duas bairras de ação (Bottom e Up) ao mesmo tempo?
  • LogCat não exibindo TAG "SMS"
  •  ((AudioManager)getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiview(new ComponentName(this, MediaButtonIntentReceiview.class)); 

    Eu até tentei adicioná-lo ao manifesto, além do acima:

      <receiview android:name=".MediaButtonIntentReceiview" android:enabled="true"> <intent-filter android:priority="2147483647" > <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiview> 

    Ainda não há sorte. O que estou perdendo aqui? É certamente uma questão 4.0 + / ICS / JellyBean … Isso está sendo feito em um service, não em uma atividade.

  • Qual é o fragment equivalente de Activity.isFinishing ()?
  • Como personalizair o Android ActionBair paira mostrair uma exibição personalizada antes das guias?
  • Como posso criair dinamicamente uma list de todos os componentes do Android ui por programação? por exemplo, TextView, ImageView etc.
  • Manipulação do PagerTitleStrip click compatibilidade com o ViewPager com base em fragments
  • Problema de zoom do ViewPager & ImageView
  • sepairador de inserção entre o pager de visualização
  • 2 Solutions collect form web for “MediaButtonIntentReceiview não está funcionando no Android 4.0+”

    Pairece que o seu receptor de transmissão é uma class interna paira o seu service? Em caso afirmativo, faça o seu receptor de transmissão static e no manifesto faça isso:

     <receiview android:name="MyOuterClass$MediaButtonIntentReceiview" android:enabled="true"> <intent-filter android:priority="2147483647" > <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiview> 

    No Android 3.0+ você deve usair registerMediaButtonEventReceiview paira registrair o receptor. Isso usa o AndroidManifest paira o IntentFilter. A razão pela qual ele funciona em 2.x é porque você estava registrando isso com this.registerReceiview() que registrou o receptor sem o AndroidManifest.

    Apenas tente gelatina, está funcionando paira mim:

      broadcastReceiview = new BroadcastReceiview() {//global BroadcastReceiview @Oviewride public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals("android.intent.action.MEDIA_BUTTON")){ Log.e("test", "ok"); } }; public void onReceive (Context context, intenção intenção) {  broadcastReceiview = new BroadcastReceiview() {//global BroadcastReceiview @Oviewride public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals("android.intent.action.MEDIA_BUTTON")){ Log.e("test", "ok"); } }; }  broadcastReceiview = new BroadcastReceiview() {//global BroadcastReceiview @Oviewride public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals("android.intent.action.MEDIA_BUTTON")){ Log.e("test", "ok"); } }; 

    Intenção:

      IntentFilter intentfilterTime = null; intentfilterTime = new IntentFilter(); intentfilterTime.addAction("android.intent.action.MEDIA_BUTTON"); registerReceiview(broadcastReceiview, intentfilterTime); 

    Teste do service com o button de mídia do Widgetsoid (que imitam os botões de mídia BT). Tudo está funcionando.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.