Search code examples
androidbroadcastreceiver

Start Broadcast Receiver from an activity in android


I would like to start a broadcast receiver from an activity. I have a Second.java file which extends a broadcast receiver and a Main.java file from which I have to initiate the broadcast receiver. I also tried doing everything in Main.java as follows but didn't know how to define in manifest file...

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

}

If I cannot do everything in one class as above, how can I call the Broadcast Receiver from Main.java? Can anyone please let me know where I'm doing it wrong? Thanks!


Solution

  • use this why to send a custom broadcast:

    Define an action name:

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

    AndroidManifest.xml register receiver :

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

    Register Reciver :

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

    send broadcast from your Activity :

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

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

    for more information for Custom Broadcast see Custom Intents and Broadcasting with Receivers