1

I'm new to java and would like to know how to do an activity run along with a service in the background. So that when the activity is closed and reopened it continues along with the service. I do not know how to explain it.

Suppose 3 services where each one is executed every hour.

Service 1... 1 hour ... Service 2 ... 1 hour ... Service 3. Finished.

And each time it is executed a textview is set visible in the activity. However when the activity is closed the textviews are not created.

The only way I found was by using variables as shown in the example below

Service 1:

public int service_one_done = 1;

Service 2:

public int service_two_done = 1;

Service 3:

public int service_three_done = 1;

Activity onCreate:

if (service_one_done == 1) { textview_example1.setVisibility(View.VISIBLE)
} if (service_two_done == 1) { textview_example2.setVisibility(View.VISIBLE)
} if (service_three_done == 1) { textview_example3.setVisibility(View.VISIBLE)
}

I would like to know if there is a better way to do this

  • there r lots of better ways; try using a broadcast receiver so when the activity is running it will listen to broadcasts sent by the service and update the textview then and there, and while your activity is destroyed it won't be listening to those broadcasts. hope this helps – shadygoneinsane Jun 07 '17 at 12:50

1 Answers1

1

In my Service class I wrote this

private static void sendMessageToActivity(Location l, String msg) {
    Intent intent = new Intent("GPSLocationUpdates");
    // You can also include some extra data.
    intent.putExtra("Status", msg);
    Bundle b = new Bundle();
    b.putParcelable("Location", l);
    intent.putExtra("Location", b);
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}

and at the Activity side we have to receive this Broadcast message

LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
            mMessageReceiver, new IntentFilter("GPSLocationUpdates"));

By this way you can send message to an Activity. here mMessageReceiver is the class in that class you will perform what ever you want....

in my code I did this....

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Get extra data included in the Intent
        String message = intent.getStringExtra("Status");
        Bundle b = intent.getBundleExtra("Location");
        lastKnownLoc = (Location) b.getParcelable("Location");
        if (lastKnownLoc != null) {
            tvLatitude.setText(String.valueOf(lastKnownLoc.getLatitude()));
            tvLongitude
                    .setText(String.valueOf(lastKnownLoc.getLongitude()));
            tvAccuracy.setText(String.valueOf(lastKnownLoc.getAccuracy()));
            tvTimestamp.setText((new Date(lastKnownLoc.getTime())
                    .toString()));
            tvProvider.setText(lastKnownLoc.getProvider());
        }
        tvStatus.setText(message);
        // Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }
};

reference here

Jai Khambhayta
  • 4,198
  • 2
  • 22
  • 29