1

Я пишу приложение, которое ловит медиа-кнопки с помощью гарнитуры bt. Однако, поскольку мой приемник указан в файле манифеста, я больше не могу контролировать свою деятельность, и я действительно хочу сделать это, чтобы «нажать» программную кнопку в действии, когда кто-то нажимает кнопку гарнитуры ,Обновление деятельности от отдельного вещательного устройства, как?

Я пробовал несколько решений, но у меня ничего не получилось. Вот мое текущее состояние

package com.siriforreq.activities; 


import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
public class MediaButtonReceiver extends BroadcastReceiver{ 
    private boolean gotMessage = false; 

    public MediaButtonReceiver(){ 
     super(); 
    } 

    public boolean isMessage(){ 
     return this.gotMessage; 
    } 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     System.out.println("IN ON RECEIVE1"); 
     if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { 


       System.out.println("GOT MEDIA BUTTON"); 
       Intent startBroadcastIntent = new Intent(context, NetworkActivity.class); 
       startBroadcastIntent.setAction("com.siriforerq.activities.ACTION_LOL"); 
       startBroadcastIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
       System.out.println("...sending broadcast"); 
       context.sendBroadcast(startBroadcastIntent); 



     } 
    } 


    } 

В вышеуказанном приемнике я поймаю кнопку мультимедиа. Но куда я могу перейти сейчас, чтобы обновить свою активность? То, что я пытаюсь сделать прямо сейчас, - отправить другую пользовательскую трансляцию и поймать ее в другом получателе в рамках этой операции, но она не работает. Вот моя активность:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_network); 


    mMediaReceiverCompName = new ComponentName(getPackageName(), MediaButtonReceiver.class.getName()); 
    mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

    IntentFilter btCommunicationFilter = new IntentFilter(); 
    btCommunicationFilter.setPriority(1000); 
    btCommunicationFilter.addAction("com.siriforerq.activities.ACTION_LOL"); 
    catchButtonEvent = new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      System.out.println("Got broadcast yes"); 
      //startTalkInteraction(); <- this is the method I want to call in the activity   
     }  
    }; 
    registerReceiver(catchButtonEvent, btCommunicationFilter); 

} 

public void onResume() { 
    super.onResume(); 

    mAudioManager.registerMediaButtonEventReceiver(mMediaReceiverCompName); 
    socketNetworkHelper = SocketNetworkHelper.getSocketNetworkHelper(ip, port); 
    setButtonStatus(true); 

} 

В приведенном выше анонимной приемнике широковещательной передачи, которое не посылается от MediaButtonReceiver никогда не вызывается, и вот моя проблема прямо сейчас. Должен ли я думать по-другому или почему мой onReceive в запуске анонимного приемника?

+0

Вы объявляете требуемые разрешения в AndroidManifest.xml? – tundundun

+0

какое разрешение ...? –

ответ

4

Как видно из документации, вы используете конструктор Intent(class,context), который создает Intent для определенного компонента. Вместо этого вы должны построить свой Intent следующим образом:

Intent startBroadcastIntent = new Intent(); 
startBroadcastIntent.setAction("com.siriforerq.activities.ACTION_LOL"); 
startBroadcastIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
+1

Omg У меня на самом деле было так, как раньше (но я думаю, у меня была другая проблема в этой точке, потому что теперь она работает). Большое вам спасибо, боролся с ним в течение некоторого времени. Утвердит и поддержит в течение пары минут – stevietheTV

Смежные вопросы