I have an Android application written in Java that uses an Overlay Service to display a search bubble similar to Facebook chat-heads or One notes Overlay.
The problem I'm facing is that on my new phone (Samsung) (Android 9) overlays get terminated after around 5 minutes of the lock screen. The OneNote Overlay visibly restarts.
I tried to implement the same by checking if was terminated by the system, not the user.
I also found a Broadcast Receiver that calls a function when the phone is unlocked even when my application is in the background.
Here I get the following error:
Not allowed to start service Intent { cmp=com.[...]/.[...] }: app is in background
What can I do to go around that?
Do I have to "push" my app to the foreground, start the overlay, and move it back in the background? is that even possible?
I guess you are using Android 10. (Not sure though). In Android 10 there's a new restriction that prevents you from starting an activity from a background service. More information here: https://developer.android.com/guide/components/activities/background-starts
Related
Hi I am trying to make a chathead bubble, like the one facebook has, for an app in android studio. I have been able to successfully display the bubble using Overlay and make it a service which continues to run even after the app is closed (not killed). However when I open another app or if I dont use my phone for more than 10 minutes, the chathead bubble disappears, unlike Facebook's bubble. How can I go about making the bubble display on the home screen and other apps for a longer period of time(potentially forever)?
For context, I used https://www.androhub.com/android-floating-widget-like-facebook-messenger-chat-head/ to make the bubble, using a View and a Service.
Thanks in advance
Your app's service will get killed by the android system to save battery. There is no exact and easy way to do that. You have to implement multiple methods to do that.
Use Foreground Service(You may have already doing this but just in case if not.)
Ask for permission to restrict Battery Optimization.
In some devices like Xiaomi and Vivo, you need special permission to always run in the background ask for that.
Ask the user to lock the app in recent tab so it won't get killed by the system.
If you are implementing the service, override onStartCommand() and return START_STICKY as the result. It will tell the system that even if it will want to kill your service due to low memory, it should re-create it as soon as memory will be back to normal.
If you are not sure 1st approach will work - you'll have to use AlarmManager http://developer.android.com/reference/android/app/AlarmManager.html . That is a system service, which will execute actions when you'll tell, for example periodically. That will ensure that if your service will be terminated, or even the whole process will die(for example with force close) - it will be 100% restarted by AlarmManager.
Whats is the alternate method to find whether the app is killed from recent list or not in android Oreo?
Requirement : App kill state has to be saved in local db.
Is there any alternate method available or any libraries to monitor app activity killed from recents?
Requesting for any suggestions related onTaskRemoved in Oreo.
I don't think there's any event callback that instructs that your app is destroyed, if so, then it will re-alive that app - which is totally negating the idea of killing staled apps.
Instead, you can always save your app's state whenever user switches away from your app i.e. save whatever you want in onStop method of your Activity.
I have an Android app that is transparent that monitors for an event and then displays a message and toggles the background between transparent and a translucent red. The app itself is working exactly as I was hoping. The problem is that only the top most app (my app) is active and updating the view. The app displays over a 3rd party app that runs a live video stream. I want the live video stream app to continue to update while my transparent app is on top. Since I have no control over the other app and it doesn't support multi-window approach, I am looking for a different approach or work around to accomplish the same thing.
I have read of people trying to use a system popup based on a service. Does anyone have experience trying to solve a similar problem and found a good approach for designing the app or a work around?
Try to google about Activity lifecycle. When another app comes as the top application (let's say your transparent app) the last playing application goes to onPause until the user bring the last app back to the top again.
The short answer is: what you want is not possible.
any question?
In detail, I want to know if it's possible to take the output from a running Android app and pipe it to the to the background of the display. In other words, have the background wallpaper update itself dynamically.
No you can't do it this way. The reason is because Android starts your app with an activity (unless your app is just made up of services to run in the background for other apps to call). Whenever your activity starts, it comes to the foreground and receives user focus. The Android documentation states that if the user performs an action that starts another activity or switches to a different app, the system calls another set of lifecycle methods on your activity as it moves to the background. At this point, the activity is no longer visible.
The closest concept to what you are trying to do is a live wallpaper but that is a service and is a different paradigm.
I have created an Android app that I am also running on BB10 devices. It has some functionality regarding call logs, but one of the most important functions is that the app has to open (assuming it's in the background currently) whenever a phone call has ended. Worded differently, it needs to foreground itself whenever a phone call has ended. I currently have it creating a dialog that opens within the app, but it will not appear until the app has been manually foregrounded. I do not have a requirement as to how it opens itself, but I do need a yes / no dialog to appear when it does.
Is there any way to have the app auto-open itself? Or is that not possible?