user1851212
user1851212

Reputation: 701

Android - IntentService - sendBroadcast from custom method

I have an intent service in my app that is called from the main thread. The intent service is started upon clicking on a button. Once started, the service connects to the server and retrieves information.

I want to send broadcast to the activity once the data is retrieved. If I send it from the onHandleIntent(), the data might not be retrieved yet.

Can't I send the broadcast from the method that retrieves the data? If not, any alternatives?

code sample:

onHandleIntent()
{

    myMethod();

  //Here where it is expected to send the broadcast
             Intent broadcastIntent = new Intent();
             broadcastIntent.setAction("com.example.intent.action.MESSAGE_PROCESSED");
             broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
             broadcastIntent.putExtra("TAG",Message);
        getApplicationContext().sendBroadcast(broadcastIntent);

}

MyMethod()
{
 //Retrieving data from server, which returns Message.

 //Here Where I want to send broadcast (Message is ready)
}

Thank you for your help.

Upvotes: 0

Views: 3606

Answers (2)

WalkingFood
WalkingFood

Reputation: 136

You could also use a handler/runnable combo to act as a timer, so that you check whether the value is null or not before sending the broadcast. See this for how to do that.

edit: It would look like this:

Handler handler = new Handler();
Runnable runnable = new Runnable() {
        public void run() {
            sendBroadcast();
        }
};


onHandleIntent()
{
    myMethod();
    runnable.run();
}

MyMethod()
{
 //Retrieving data from server, which returns Message.

 //Here Where I want to send broadcast (Message is ready)
}


sendBroadcast(){
// If your value is still null, run the runnable again
if (Message == null){
    handler.postDelayed(runnable, 1000);
}
else{
//Here where it is expected to send the broadcast
             Intent broadcastIntent = new Intent();
             broadcastIntent.setAction("com.example.intent.action.MESSAGE_PROCESSED");
             broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
             broadcastIntent.putExtra("TAG",Message);
        getApplicationContext().sendBroadcast(broadcastIntent);
}
}

Upvotes: 1

zozelfelfo
zozelfelfo

Reputation: 3776

You could do the following in your activity class:

1- Create a BroadcastReceiver

private class MyBroadcastReceiver extends BroadcastReceiver             
  @Override    
  public void onReceive(Context context, Intent intent) {


  //Get your server response
  String server_response = intent.getExtras().getString("TAG");

  //Do your work
  }
}

2- Create an object in your activity (as a member of the activity)

MyBroadcastReceiver mReceiver= new MyBroadcastReceiver ();

3- Register it in your onResume() method and deregister it in your onPause() method.

@Override
public void onResume() {
    super.onResume();

    IntentFilter filter = new IntentFilter();
    filter.addAction("com.example.intent.action.MESSAGE_PROCESSED");

    registerReceiver(mChatReceiver, filter);
}

@Override
public void onPause() {
    super.onPause();
    unregisterReceiver(mReceiver);
}

That should be enough!, Hope it helps!

Upvotes: 0

Related Questions