Search code examples
androidserviceandroid-activitybroadcastreceiver

Pass a value from activity to broadcastreceiver and start a service from the broadcast receiver


I have an activity. It contains a button whose text changes dynamically. I would like to pass this text to my broadcast receiver which receives the sms. Now my broadcast receiver should receive the text and based on the text it should start or stop a service. How to do this?


Solution

  • if your BroadcastReceiver is defined in a separate class file, then you may simply broadcast the value to that receiver. Once the value is received, do the magic for service by using receiver's context

    Update:

    in your activity:

    Intent in = new Intent("my.action.string");
    in.putExtra("state", "activated");
    sendBroadcast(in);
    

    in your receiver:

    @Override
    public void onReceive(Context context, Intent intent) {
      String action = intent.getAction();
    
      Log.i("Receiver", "Broadcast received: " + action);
    
      if(action.equals("my.action.string")){
         String state = intent.getExtras().getString("state");
         //do your stuff
      }
    }
    

    in manifest xml:

    <receiver android:name=".YourBroadcastReceiver" android:enabled="true">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            <action android:name="my.action.string" />
            <!-- and some more actions if you want -->
        </intent-filter>
    </receiver>