2010-07-10 16 views
1

Je veux envoyer une diffusion à partir d'un nouveau thread est le début.envoyer l'intention de diffusion à partir de runnable

C'est ce que j'ai essayé:

 new Thread(new Runnable() { 
     public void run() { 
      //some other code for timing. 
      // .. 
      // .. 
      Intent broadcastIntent = new Intent(); 
      broadcastIntent.setAction(Intent.ACTION_ANSWER); 
      this.sendBroadcast(broadcastIntent); 
     } 
    }).start(); 

Mais j'ai besoin ofcourse context..this ne fonctionnera pas. Comment puis-je gérer cela.

Répondre

-3

J'ai également fait face à ce problème.

Voici ma solution. L'application dans laquelle vous implémentez ceci doit avoir une activité. Ainsi, dans cette activité, créez une variable statique de lui-même et affectez-lui cela.

ex:

public class MyActivity extends Activity { 
    static MyActivity thisActivity = this; 
    //rest of the code goes here 
} 

Maintenant, dans le fil, faites ceci:

MyActivity.thisActivity.sendBroadcast(myintent); 

espoir, cela répond à votre question!

+0

Pas vraiment une bonne idée. – natario

+0

Excellente idée pour beaucoup de bugs. –

+0

L'activité statique est une étape pour les fuites de mémoire. Ne fais jamais cela. – Gark

3

Ce que je fais habituellement, bien que tout à fait aki, est la suivante:

final Context mCtx = this; 
new Thread(new Runnable() { 
    public void run() { 
     //some other code for timing. 
     // .. 
     // .. 
     Intent broadcastIntent = new Intent(mCtx, TargetClass.java); 
     broadcastIntent.setAction(Intent.ACTION_ANSWER); 
     this.sendBroadcast(broadcastIntent); 
    } 
}).start(); 

Aussi, rappelez-vous d'inclure la classe cible Java dans le constructeur intention.

J'espère que ça aide!

+0

Peut-être cela aura-t-il un sens si l'objet Thread est et l'instance du type interne de la sous-classe de Context? Et il n'y a pas de méthode Thread.sendBroadcast. L'appel correct est SomeActivityName.this.sendBroadcast (broadcastIntent). –

+0

désolé, je voulais dire mCtx.sendBroadcast (broadcastIntent). –

+1

Cela ne devrait-il pas être 'Intention broadcastIntent = new Intent (mCtx, TargetClass.class);'? – midhunhk