web-dev-qa-db-fra.com

Démarrez Broadcast Receiver à partir d'une activité dans android

Je voudrais démarrer un récepteur de diffusion à partir d'une activité. J'ai un fichier Second.Java qui étend un récepteur de diffusion et un fichier Main.Java à partir duquel je dois lancer le récepteur de diffusion. J'ai également essayé de tout faire dans Main.Java comme suit, mais je ne savais pas comment définir dans le fichier manifeste ...

Main.Java:

public class Main extends Activity {
/** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
String rec_data = "Nothing Received";
private BroadcastReceiver myReceiver = new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            if( intent.getStringExtra("send_data")!=null)
                    rec_data = intent.getStringExtra("send_data");
            Log.d("Received Msg : ",rec_data);
        }
    }; 
    }
    protected void onResume() {
        IntentFilter intentFilter = new IntentFilter();
        //intentFilter.addDataType(String);
        registerReceiver(myReceiver, intentFilter);
        super.onResume();
    }

  @Override
protected void onPause() {
// TODO Auto-generated method stub
    super.onPause();
    this.unregisterReceiver(this.myReceiver);
}

}

Si je ne peux pas tout faire dans une classe comme ci-dessus, comment puis-je appeler le récepteur de diffusion depuis Main.java? Quelqu'un peut-il me faire savoir où je me trompe? Merci!

17
Leela

utilisez cette raison pour envoyer une diffusion personnalisée:

Définissez un nom d'action:

public static final String BROADCAST = "PACKAGE_NAME.Android.action.broadcast";

Récepteur de registre AndroidManifest.xml:

<receiver Android:name=".myReceiver" >  
    <intent-filter >  
        <action Android:name="PACKAGE_NAME.Android.action.broadcast"/>  
    </intent-filter>  
</receiver> 

Enregistrer le récepteur:

IntentFilter intentFilter = new IntentFilter(BROADCAST);
registerReceiver( myReceiver , intentFilter);

envoyer la diffusion de votre activité:

Intent intent = new Intent(BROADCAST);  
        Bundle extras = new Bundle();  
        extras.putString("send_data", "test");  
        intent.putExtras(extras);  
        sendBroadcast(intent);

VOTRE BroadcastReceiver:

private BroadcastReceiver myReceiver = new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
             Bundle extras = intent.getExtras();
           if (extras != null){  
           {
                    rec_data = extras.getString("send_data");
            Log.d("Received Msg : ",rec_data);
            }
        }
    };

pour plus d'informations sur la diffusion personnalisée, voir Intentions personnalisées et diffusion avec des récepteurs

32
ρяσѕρєя K

consultez ce tutoriel ici, vous obtiendrez toute l'aide sur la diffusion, y compris comment démarrer le service à partir de l'activité ou vice versa

http://www.vogella.de/articles/AndroidServices/article.html

2
vipin

Pour cela, vous devez diffuser une intention pour le récepteur, voir le code ci-dessous: -

Intent intent=new Intent();
getApplicationContext().sendBroadcast(intent);

Vous pouvez définir l'action et d'autres propriétés de l'intention et diffuser en utilisant le contexte d'application, quelle que soit l'action de l'intention que vous définissez ici que vous devez définir dans le AndroidManifest.xml avec la balise de réception.

0
Om Narain Shukla

Vérifiez cette réponse:

https://stackoverflow.com/a/5473750/928361

Je pense que si vous ne spécifiez rien dans le IntentFilter, vous devez indiquer l'intention de la classe de récepteur.

0
gutiory