I'm trying to hit API request from a broadcast receiver, can anyone mention correct way of doing it?

229 views Asked by At

public class GetReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    SharedPrefHelper sharedPrefHelper = new SharedPrefHelper(context);
    NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    manager.cancel(1);
    if (intent != null) {
        if (intent.getStringExtra("result") == "ok") {

            JsonObject jsonObject = new JsonObject();
            jsonObject.addProperty(Web.Register.User_Id, sharedPrefHelper.getUserId());
            jsonObject.addProperty(Web.BookingRequest.ACTIVITY, "ok");
            new BasePresenter<>().createApiRequest(BaseApplication.getRetrofit().create(ApisHelper.class)
                    .okResponse(jsonObject), new BaseCallBack<BasicApiModel>() {
                @Override
                public void onCallBack(BasicApiModel output) {
                    if (Log.isLoggable("qwert", Log.DEBUG)) {
                        Log.d("qwert", "Receiver's onCallBack: " + output.getMessage());
                    }
                }
            });
        } else {

             Log.d("qwert", "onReceive: testing_cancelled");
        }
    }
}

what is the correct way of starting api request from receiver ?

1

There are 1 answers

4
Aritra Bhattacharya On

Don't start any long running task in your broadcast receiver, otherwise your app may crash if onReceive runs more than 10 sec. It's better to trigger a service from onReceive method and put your network operation inside the service. Also keep in mind to use intent service / any other service depending on your requirement, with a worker thread to run your network operation so that your UI thread doesn't get blocked.