2

バックグラウンドで実行されているサービスからインテントを受信する必要があるブロードキャストレシーバーを実装しようとしていますが、機能していません。

私のメインアクティビティでは、サービスをバインドonClickし、ボタンから開始します。

私のSpeechRecognizerServiceクラスで、新しいものを作成しますBroadcastReceiver(以下のコードを参照)。

public void onCreate() {
    Log.d(TAG, "onCreate");             

    if (SpeechRecognizer.isRecognitionAvailable(this)){                         //check if a SpeechRecognizer is available
        this.sr = SpeechRecognizer.createSpeechRecognizer(this);       
        this.sr.setRecognitionListener(new listener());  

        commandsReceiver = new CommandsReceiver();
        ConnectivityManager cm =(ConnectivityManager) 
        getSystemService(Context.CONNECTIVITY_SERVICE);

        testfilter = new IntentFilter();
        registerReceiver(commandsReceiver,testfilter);

    } else {
        Toast.makeText(this,"Please install a SpeechRecognizer on your system.", Toast.LENGTH_LONG).show();  //alert if speech-recognizer is not installed on the device
        Log.d(TAG, "no SpeechRecognizer available");
        this.onDestroy();
    }   
}

私のonResult中で私はこのようにします:

Intent intent = new Intent();
intent.setAction(CommandsReceiver.TEST);
sendBroadcast(intent);

私の中で、CommandsReceiver私は単純なStringログメッセージを受け取りました:

public class CommandsReceiver extends BroadcastReceiver {
    public static final String TEST = "de.speech.TEST_INTENT";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("BroadCastReceiver", "Intent received"+intent);
    }
}

しかし、私はLog.d()メッセージを受け取っていません。

あなたが私を助けてくれることを願っています。

4

1 に答える 1

2

アクションなしでIntentFilterを作成しているようです。

testfilter = new IntentFilter();

それ以外の、

testfilter = new IntentFilter(CommandsReceiver.TEST);

したがって、を使用してBroadCastを登録します。

testfilter = new IntentFilter(CommandsReceiver.TEST);
registerReceiver(commandsReceiver,testfilter);
于 2012-09-10T07:57:12.423 に答える