1

bt-headsetからmedia-button-clicksをキャッチするアプリケーションを書いています。ただし、受信者がマニフェストファイルに記載されているため、突然アクティビティを制御できなくなります。本当にやりたいのは、誰かがヘッドセットボタンを押したときに、アクティビティのソフトウェアボタンを「押す」ことです。 。

私はいくつかの解決策を試しましたが、何も機能しませんでした。これが私の現在の状態です

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を使用しないのはなぜですか?

4

1 に答える 1

4

ドキュメントに示されているように、特定のコンポーネントのIntent(class,context)を作成するコンストラクターを使用しています。Intent代わりに、次のIntentように作成する必要があります。

Intent startBroadcastIntent = new Intent();
startBroadcastIntent.setAction("com.siriforerq.activities.ACTION_LOL");
startBroadcastIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
于 2013-03-26T10:48:09.060 に答える