Start Activity from Service in Android

AndroidAndroid IntentAndroid ActivityAndroid Service

Android Problem Overview


Android:

public class LocationService extends Service {

    @Override
	public void onStart(Intent intent, int startId) {
		super.onStart(intent, startId);
		startActivity(new Intent(this, activity.class));
	}
}

I launched this service from Activity

In Activity if condition satisfies start

startService(new Intent(WozzonActivity.this, LocationService.class));

from my LocationService mentioned above could not launch Activity, how can I get context of current running Activity in service class?

Android Solutions


Solution 1 - Android

From inside the Service class:

Intent dialogIntent = new Intent(this, MyActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);

But, this does not work from Android 10+ due to battery optimisation restrictions

Solution 2 - Android

I had the same problem, and want to let you know that none of the above worked for me. What worked for me was:

 Intent dialogIntent = new Intent(this, myActivity.class);
 dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 this.startActivity(dialogIntent);

and in one my subclasses, stored in a separate file I had to:

public static Service myService;

myService = this;

new SubService(myService);

Intent dialogIntent = new Intent(myService, myActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myService.startActivity(dialogIntent);

All the other answers gave me a nullpointerexception.

Solution 3 - Android

UPDATE ANDROID 10 AND HIGHER

Start an activity from service (foreground or background) is no longer allowed.

There are still some restrictions that can be seen in the documentation

https://developer.android.com/guide/components/activities/background-starts

Solution 4 - Android

Another thing worth mentioning: while the answer above works just fine when our task is in the background, the only way I could make it work if our task (made of service + some activities) was in the foreground (i.e. one of our activities visible to user) was like this:

	Intent intent = new Intent(storedActivity, MyActivity.class);
	intent.setAction(Intent.ACTION_VIEW);
	intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
	storedActivity.startActivity(intent);

I do not know whether ACTION_VIEW or FLAG_ACTIVITY_NEW_TASK are of any actual use here. The key to succeeding was

storedActivity.startActivity(intent);

and of course FLAG_ACTIVITY_REORDER_TO_FRONT for not instantiating the activity again. Best of luck!

Solution 5 - Android

one cannot use the Context of the Service; was able to get the (package) Context alike:

Intent intent = new Intent(getApplicationContext(), SomeActivity.class);

Solution 6 - Android

Alternately,

You can use your own Application class and call from wherever you needs (especially non-activities).

public class App extends Application {
	
	protected static Context context = null;

	@Override
	public void onCreate() {
		super.onCreate();
		context = getApplicationContext();
	}

	public static Context getContext() {
		return context;
	}
	
}

And register your Application class :

<application android:name="yourpackage.App" ...

Then call :

App.getContext();

Solution 7 - Android

You can also use getApplicationContext() method in your Service to run the startActivity() method as written below:

Intent myIntent = new Intent();
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(myIntent);

Solution 8 - Android

If you need to recal an Activity that is in bacgrounde, from your service, I suggest the following link. Intent.FLAG_ACTIVITY_NEW_TASK is not the solution.

https://stackoverflow.com/a/8759867/1127429

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questiond-manView Question on Stackoverflow
Solution 1 - Androidd-manView Answer on Stackoverflow
Solution 2 - AndroidAndyView Answer on Stackoverflow
Solution 3 - AndroidJosé BrazView Answer on Stackoverflow
Solution 4 - AndroidkellogsView Answer on Stackoverflow
Solution 5 - AndroidMartin ZeitlerView Answer on Stackoverflow
Solution 6 - AndroidjamesView Answer on Stackoverflow
Solution 7 - AndroidSuraj GaurView Answer on Stackoverflow
Solution 8 - AndroidGMGView Answer on Stackoverflow