I have an app that run some security checks and alerts the user using notifications when the device connects to a WIFI network with an specific SSID. The app run checks in background and if there is some security issue alerts the user using notifications.
The issue is that I was using a broadcast receiver for this but with Android Oreo or newer is not working any more. I was reading a lot and I can't find a way for running some background action exactly when the WIFI connection is turned on.
I am missing something or Google has killed my app?
Related
Right now I'm developing client application for Android that works with physical locks with our controllers. User can open lock via Bluetooth using this application (connection -> secure session creation -> sending some user key).
All works fine except one feature: opening lock when Android device screen is off.
I am using following approach:
Foreground service that periodically scans for nearby BLE devices and when scan is successful (nearby lock device found using BLE filters), application tries to connect and send lock key to lock device.
So, there are two problems:
Android kills foreground service in few minutes after screen off. After setting ignore battery optimization it works ok, however I can't find universal way to navigate user to those settings (because those settings are vendor specific, see https://dontkillmyapp.com/ and android open battery settings programically).
Background limits for BLE scanning are tricky.
I know one application that achieved same thing without foreground service: https://play.google.com/store/apps/details?id=eu.hoermann.ast.bluesecur, this application seems to work good in background without user interaction with battery usage optimization menu.
So, question is:
what is the best way to trigger background process (device screen is turned off) when nearby suitable BLE device available?
Your requirements perfectly describe the scenario of a companion app. Disadvantage: it is only available from Android 12 (API level 31) onwards.
I think you shoul add a wake lock with the service:
https://developer.android.com/training/scheduling/wakelock
https://developer.android.com/training/scheduling/wakelock#cpu
I have a security system where moving a Bluetooth LE device causes my android application to do some work. After some of the newer Android updates, I believe API 26, I could no longer get these updates if the Android device's screen was off. I was trying to think of a way around this and came up with an idea:
What if I paired the Android device and the Bluetooth device - would this allow for the message to be received when the Android screen is off?
Previously, all my BLE devices were part of a mesh, so I would regularly have the Android app check for changes in the mesh and turn the screen on to notify the user if needed. Now, because of the background execution limits introduced, I must require the Android device to have the screen on at all times, which leads to the death of display over time.
I'm not that great at programming in C, which is the language the BLE chips are programmed in, so I wanted to ask this first before spending hours just to see this NOT work. So, just to repeat the question: Will having a BLE device paired with the Android device allow a message through these restrictions when the Android screen is off?
If not - is there a way I can make this work?
Thank you for any info!
Use notifications instead of advertisements. This will deliver data instantly and works even if the screen is off. Newer versions of Android have introduced more restrictions for BLE scanning when the screen is off.
Use connectGatt with autoConnect set to true to automatically connect and reconnect in case the connection drops.
Use a Foreground Service in your app process to prevent the app process from being killed. If your app process exits, all Bluetooth connections are dropped as well.
You could use CompanionDeviceManager to gain some extra permissions.
You don't really need to be paired but it has some benefits such as faster connection setup and correctly remembering the address type (flaw in the API that this is missing).
I connect to a BLE(Bluetooth low energy) device and want to stay connected even app is killed.
For Android Oreo version, I have tried to start foreground service for that purpose. However, the persistent notification in the lockscreen and notification bar is very annoying.
I know this feature comes with Android Oreo version, but I wonder how "Galaxy Wearable" app handles with this problem.
I have a Gear S3 smartwatch and this app connects to my watch and stay connected even app is killed without showing any notification to me.
I exactly want to connect like this way.
Any help would be appreciated
My Android app does not receive FCM push messages immediately, if the phone is on standby and not currently charging. I think I really set everything I could in the phone settings regarding energy saving... Is there something I can do in the app itself?
It works on other manufacturers but on our Huawei it doesn't...
These phones tend to kill all background app. I mean no sticly service and broadcast receivers as well. Try whitelisting your app from battery settings. It will prevent your app from getting killed by system
I'm developing an android application using BLE. I've implemented all the basic operations like discovery, connection, and data transfer.
Now I was looking for BLE notifications, Is it possible to receive notification from BLE device when the application is not running (not even in background).
What I want to implement is the notification similar to GCM/FCM, we receive notifications in our app even though app is not running.
So want to check if similar notification mechanism is supported by BLE devices and Android framework.
I've searched for few hours now but didn't get any proper result.
If anyone can just tell me if it is supported or not?
Now I was looking for BLE notifications, Is is possible to receive notification from BLE device when the application is not running (not even in background).
BLE is just a communication protocol. When someone talks, someone has to listen.
What I want to implement is the notification similar to GCM/FCM, we receive notifications in our app even though app is not running. So want to check if similar notification mechanism is supported by BLE devices and Android framework.
GCM/FCM works because Google Play Services is running on the device listening for messages.
I can imagine two possible cases based on your question:
If by "receive notification" you mean a change in a Bluetooth characteristic - well your app should be running already. Only you know how to talk to the BLE device.
If you want to implement a location aware beacon type behavior with BLE you may be able to leverage the existing Google Nearby feature to achieve the desired effect.
I would say no. You need to have the app running to get Bluetooth callbacks. You should simply set up a Foreground Service in your process and that will keep the app running in the background.
If you want to receive notification event if your app is not running, you should implement Android service that continuously scan for BLE frames and ones it catch some frame that is met some parameters (for example for iBeacon it will be specific Major and Minor values; for Eddystone URL -- some specific URL etc.) -- just send intend to start your application.