Search code examples
androidbroadcastreceiverintentservice

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.


Solution

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