2012-09-10 4 views
2

J'essaie de mettre en œuvre un récepteur de diffusion qui devrait recevoir l'intention d'un service qui fonctionne en arrière-plan, mais cela ne fonctionne pas.Récepteur de diffusion ne recevant pas d'intention via le service

Dans mon activité principale, je viens de lier le service et le démarrer via onClick sur un bouton.

Dans mon SpeechRecognizer Classe de service, je crée un nouveau BroadcastReceiver (voir le code ci-dessous).

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(); 
    } 
} 

Dans mon onResult je le fais comme ceci:

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

Dans mon CommandsReceiver Je viens d'un simple String et un message de journal:

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); 
    } 
} 

Cependant, je ne reçois pas le message Log.d().

J'espère que vous pouvez m'aider.

Répondre

2

Semble vous créez un IntentFilter sans aucune action en

testfilter = new IntentFilter(); 

au lieu de,

testfilter = new IntentFilter(CommandsReceiver.TEST); 

donc, enregistrez votre BroadCast en utilisant,

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

Ah droite i doit être aveugle .... maintenant cela fonctionne –

+0

Comme vous êtes un nouvel utilisateur et que vous n'avez pas coché de réponse. Mieux commencer à cocher les réponses de marquage dont vous êtes satisfait. Donc, ce futur utilisateur peut savoir que cette réponse a déjà été répondue. –

+0

Merci pour les conseils que je garderai en tête –

Questions connexes