Is their a way to start a service as a foreground service and hide the notification while an activity is visible?
Consider a music player, while the app is opened, you don't need the notification (with i.e. the buttons), but whenever the music player is in the background, the notification should be shown.
I know, how to do this, if I DON'T run my service in foreground... But when running in foreground, the service itself needs the notification and shows it and I can't manage the notification by myself...
How can I solve that problem?
You can do it like this. One prerequisite to this method is, that your activity must bind the service.
First you start service foreground.
Then in your activity you bind and unbind the service as shown below.
BIND_ADJUST_WITH_ACTIVITY
is important for keeping service alive for the time it is bound to visible activity.Now here is the last past. You stop foreground, when at least one client is connected to the service, and you start foreground, when last client disconnects.
When binding a service, you have to consider rules applied by Android. If you bind a not started service, the service will not start automatically unless you specify
BIND_AUTO_CREATE
flag in addition toBIND_ADJUST_WITH_ACTIVITY
flag.If service was started with auto creation flag on, and last client unbinds then service will stop automatically. If you want to keep service running you have to start it with
startService()
method. Basically, your code will look like the one below.Calling
startService()
for already started service has no effect on it, as we do not overrideonCommand()
method.Use following steps:
1.Use ActivityManager to get current package name(i.e the Activity Running on top).
2.check if its your application then do not show the notifications
3.else If it is not your application then show the notifications.