-
Notifications
You must be signed in to change notification settings - Fork 836
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Not receiving advertisements when screen off on older Samsung phones? #914
Comments
You might try setting the long running scan override flag here: |
@davidgyoung This seems to be enabled by default in the reference project but the comment seems to make a confusing suggestion.
|
And to clarify, it doesn't seem to do anything for me here. |
And to emphasize, a scan will process exactly every 5 seconds after the screen turns off. |
I certainly cannot explain the every 5 second part. I have done plenty of testing on Samsung Galaxy X devices with the screen off. (Pre-Android 8) and seen detections every second. There must be something else different in your case and the unusual beacon seems like a lot may be a candidate for some unknown reason. Can you reproduce this 5s problem if you use iBeacon or AltBeacon? (You can use a beacon simulator app for iOS of Android to try.) |
@davidgyoung Well, I can confirm to you its not the beacons fault as I never actually pair to the beacon and listen only for adverts. Having my S6 and S10+ side by side sleeping, the S10+ receives every advert instantly while the S6 very intermittently. I installed an altbeacon simulator on my S10+ and broadcasted so my S6 would pick it up. In the log below you can see a log of every time I receive an advert. (Note I added a extra log inside the library to be sure of this, that is what onBeaconAdvert is). I see this same behavior without edits aswell. You can clearly see how frequent I receive adverts and then about half way through the log, the phone screen turns off and we get infrequent adverts (once every 5 seconds). All scans below were from a Samsung Galaxy S6 running Android 7.0. I do however see the exact same results on a Galaxy S7 running Android 6.0.1... Yes, the S7 is running an earlier version of android than the S6.
Here you can see another run with the plain library with setDebug(true). I have filtered for "processing pdu type" in this log. Again I let it run with screen on for a few seconds then turn the screen off. We see the exact same behavior.
Here is an unfiltered log of the same scenario.
You can see that the libs code is running, so the app seems to be still running fine. Just not getting BLE adverts. |
Hmm. This is curious as.it is not consistent with my own tests. Just to eliminate any differences, do you see the same results with the reference app unmodified except to set the background scan period/between scan period to 1000/0? |
Not sure exactly what you mean. This is what the current code is:
|
Try removing these two lines: beaconManager.enableForegroundServiceScanning(builder.build(), 456); They should not be necessary prior to Android 8. And please look for any other lines that differ from the default reference app. I am just trying to eliminate any differences from what I have repeatedly tested before to find what explains the difference between what you see and what I do. |
@davidgyoung Same thing with those lines commented and everything else the same as reference. |
Huh @davidgyoung I'm now seeing this happen on my S10+. When the screen is off, I no longer receive advertisements. Works fine on the lock screen though. I'm using a completely stock version of the reference app apart from enabling the foreground service code. Based off the rest of the library logs, everything else is running as expected. IE it is starting new scan cycles. |
What is the OS version on the S10+? What is different from your earlier report where you said you saw scans fine on the S10 with the screen off? |
Android 9 Kernel 4.14.78-15672595. The only possible thing different from what I can tell is the phone is currently charging at around 20% battery. I have, however, disabled battery optimizations for the sample app and no battery saver mode is activated. |
Huh, so I think I found out what is happening on the S10+. On my older code that is using standard BLE calls, everything works fine. But it seems the android beacon library is acting as if I tried to run a scan without a ScanFilter attached to the scan. My old code with a scan filter works on this device when slept, but my old code without a ScanFilter doesn't work when the device sleeps. I know on the newer versions of android, a scan filter is necessary when using SCAN_MODE_LOW_LATENCY or at all to get events when the device sleeps. Hopefully, that clears something up, seems like some sort of bug. @davidgyoung |
Yes, that could explain it. Starting with Android 8.1 a scan filter is required to detect with the screen off. The library detects 8.1+ and adds an empty scan filter which works on non-Samsung devices with 8.1+. Samsung made a proprietary enhancement affecting 8.1+ requiring thos same scan filter to be non-empty. The library knows this, too, so it adds a non empty scan filter based on the beacon parser. This means though that the hardware assist manufacturer must be correct on Samsung 8.1+ to detect in the background. You have an unusual hardware manufacturer, so this must be set just right. |
Alright, I'm guessing my hardware assist manufacturer is incorrect then.
Any idea what could be wrong? nRFConnect clearly shows the company as Sylero 0x0551 I don't believe this would even resolve the issue on the older phones though. |
Use a beacon layout that does not have index offsets less than 2. This is bad: m:0-1=5105,i:0-1,p:1-1 The above might work for non filtered scans but it will not work for filtered ones. I should add a warning message to the library about this. The offsets prior to index 2 are outside the data range of the manufacturer advert and are probably corrupting the scan filter. If needed, check the system level log messages after the scan starts in the background. It shows the raw bytes olf the filter. |
That seems to fix it on the S10+. I will say, unfortunately, that the issue still persists on the S6 and S7. Could this possibly be caused by Doze mode? As I'm pretty sure those only effect Android 6 and 7? |
@android-bash, please help us keep this issue on target (it is specific to Samsung phones) by posting questions about Pixel phones elsewhere. I'd suggest that Stackoverflow.com is the best place to start your question about your code. If we find there is a bug in the library we can open a new issue here. I have deleted your comment on this issue to keep this on topic, but feel free to copy it and past it as a new SO question and I will try to help there. |
Sure thing. I understand. I have opened a question in Stack overflow. Please look in to it. |
Close as [possibly] fixed by #941 ? |
Thanks @maxkunes I believe that change should fix these issues. Closing until we have a report otherwise. |
Using the reference application and viewing adb, I seem to infrequently receive advertisements when the phone screen is off. I've seen this happen on my S6 and S7 but not with the exact same app on my S10.
The S6 and S7 are running Android 6 and 7. The adverts seem to not come in around 5 seconds or so after the screen turns off but then I sometimes get events every 5 seconds or so after the continuous scans stop.
The only code I have modified is adding a beacon parser with this info. This seems to work fine as when the screen is on I can clearly see advertisments come in.
And this to enable continuous scans.
I also don't see anything obviously wrong with any log messages.
Here are the messages when the device is slept. The device was sending out advertisements more than one time per second and once I slept, they came very infrequently.
The target device is here the sylero one.
The text was updated successfully, but these errors were encountered: