2012-09-10 134 views
2

我想實現一個廣播接收器誰應該從後臺運行的服務接收意向,但它不工作。廣播接收器沒有通過服務接收意圖

在我的主要活動中,我只是綁定服務並通過按鈕上的onClick啓動它。

在我的SpeechRecognizer服務類中,我創建了一個新的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()

我希望你能幫助我。

回答

2

看來你是沒有任何行動創造一個IntentFilter的作爲

testfilter = new IntentFilter(); 

代替,

testfilter = new IntentFilter(CommandsReceiver.TEST); 

因此,使用註冊您的廣播,

testfilter = new IntentFilter(CommandsReceiver.TEST); 
registerReceiver(commandsReceiver,testfilter); 
+0

啊您的權利,我必須要盲目....現在它的工作 –

+0

因爲你是一個新用戶,你沒有檢查任何答案。更好地開始檢查標記你滿意的答案。所以,未來的用戶可以知道這個答案已經被回答。 –

+0

感謝您的建議,我會牢記這一點 –