I am testing an Android GPS tracking application in the Emulator and I am running into a problem when trying to figure out if the last known location is stale or not. Getting the system time gives me the correct time, but when I call location.getTime() for the last known location the time returned is off by a few hours. I did some more testing and found out that every time I send a GPS location from the Emulator control tab in Eclipse (similar to geo fix), the location's time is advanced by one second. This makes no sense at all! I would appreciate any insights into this problem.
As discussed this appears to be a bug in the emulator (I was able to repeat it as well). I filed a bug report at https://code.google.com/p/android/issues/detail?id=27272 if anyone wants to add details, star it, and/or follow along.
This bug has been fixed in the ToT dev branch for API 26. We will cherry-pick this fix to other branches and hopefully the public available system images will see the bug fix in the near future.
If any issue persists, please report at Google issue tracker they will re-open to examine.
Related
a colleague of mine is working on a legacy ReactNative app. There is quite a lot of code both in JavaScript and Java land, the latter being related to HERE Maps SDK.
Two of our clients experience multiple crashes every day and we cannot figure out why as we have no error reports.
Bugsnag was installed early last year (circa jan 2020) and we have nothing on there to help us. Nothing to be found in Google Console either. App just stops.
To help us debug we've added a logging system which sends debug info to our backend via dedicated API calls.
It roughly consists of logging "start of function A", "end of function A" etc so we know what the app is doing. We don't always enable it as it tends to make the app even more unstable.
In parallel to that we managed to get an idea of when the app crashes via login events that are sent by Firebase Auth when user re-launches the app.
Looking at our logs around the time of crash doesn't help us as 1) they look the same as when it all works and 2) we haven't covered all method calls as there are way too many (in JS and Java).
Our users run the app on a Samsung Galaxy Active Tab 2 mounted in the cabin of a tractor. Some use a Galaxy Active Tab 3 and also have the issue.
We have run through various theories :
Could it be too hot in the cabin so Android shuts down? No, tablet is always on according to clients.
Could it be related to a change in voltage? When WE try to plug and unplug everything continues to work fine.
Could it be Android that decides the app is consuming too much battery or CPU (GPS is needed for our app) so it shuts it down? We've let our app in the foreground for hours with no problem.
We logged in with customers' credentials (they are aware) and could not replicate the issue.
Customers interest in helping us find the issue is slowly fading away so we can't keep on asking them to install a patched version every week.
First there was just one client but now we have at least 3 more users complaining about mysterious crashes.
We're a bit stomped as to what to do.
Has anyone any idea of an ultimate catch all library? Or a syslog on the tablet where we could get more info?
Thanks in advance for your help!
After much testing my colleagues managed to easily reproduce the error and found the root cause: poor memory management in one method in Java land.
Said method was responsible for changing markers orientation on the map but it duplicated markers when their orientation changed. It resulted in a high memory consumption and when it reached a certain point Android would just kill all running apps.
My colleague fixed the leak and we're good! Onto the next bug now. :)
The below reasoning is based on hardware failure. If your software hasn't drastically changed (the app or the operating system), then this is a likely scenario:
The Tab 2 was released in 2012, so we're talking about a device that is up to 9 years old. If the users all use the same hardware, and the software hasn't been changed for a while, it could be some kind of hardware failure. It could be related to the vibrations of the tractor, moisture over time, or just because they used the tablet more intensively than you use yours. There could be something (semi-)loose or the memory (SSD or RAM) could start becoming faulty.
It can be a software error too of course, but it's unlikely if you haven't updated in a long time - assuming the tablets haven't been updated either.
Could you perhaps swap your tablet with one of a customer. Preferrably a customer that has the issue most often. Then observe if the issue is resolved.
This way, you'll be able figure out if it is related to the tablet (being broken) or the environment (tractor) it is being used in.
If the issue persists after a tablet swap, it's either the environment or the software, but you'd have ruled out the hardware.
If the issue is resolved, you'll know for sure it's the hardware at fault.
We have a ReactNative app, running on both iOS and Android.
We developed our own native module for GPS updates.
On iOS, it's working OK !
On Android, we're using FusedLocationProviderClient.
My problem: in some very rare cases on android, less than a few % of our GPS data, we see GPS data with correct latitude, but longitude keeps jumping around the real one (e.g. this seems to happen on some Samsung S9+)
See this screenshot
This bug only last a few minutes, then seems to resolve on its own...
Has anyone encoutered this bug too ?
If so, how did you fix it ?
(note: I can add code samples if you think it can help, but I'm having big difficulties reproducing this bug myself, so I doubt it's useful in this case...)
GPS takes awhile to lock, and depending on the phone, it can take quite awhile and be unreliable. The best thing you can do is check the accuracy that is reported, and also live poll the user's location when they open a relevant activity so by the time you need the location, it most likely has an accurate lock.
Also if needed, ask the user to apply their highest location accuracy settings. Details on how to do this can be found here
GPS takes some time to latch, and there should be at least 3 satellites to be able to latch for the device, if the user is indoor, it is nearly impossible to latch.
You will have to check for the accuracy, on testing I have found that if accuracy value becomes 2.9 (may be different on different devices, but till now I haven't seen) then your device location is set.
Or give some time to devise and record coordinates when you think it's feasible depending upon accuracy.
Hope this may help you...
I have a certain crash that is happening in my app that causes Android Studio to disconnect my device from the debugger instead of stopping at a breakpoint. Does anyone know how to make it break at the crash instead of disconnect?
To be clear: the other 99.9% of the time breakpoints work - every breakpoint I put in the app breaks. But when the code runs past a certain line in a 3rd party library the app crashes and it disconnects the debugger instead. It happens across multiple installations and I've had this issue randomly on a variety of bugs over months of development across different machines and devices and versions of Android Studio. I've been able to work through it before with the error messages etc but this time there aren't any helpful error messages in the console and I'm a bit stuck.
It doesn't matter if I have all exception breakpoints on or not. I am unable to find any other questions that deal with only certain exceptions disconnecting the device (or emulator) from the debugger. Has anyone else been able to solve this?
I was finally able to fix my issue here. It turns out that rolling back the NDK version from the current (at time of writing) v 13b back to 11c fixes the crash. So I don't know a lot of the "why" this fixed the problem other than what a friend mentioned about there being a bug in the newest version, which caused me to roll back the NDK.
Not the comprehensive answer I was hoping for but it's good enough for my current needs. If anyone has a better explanation, I'd love to understand the "why" better. Or if someone has an actual solution, I'd be even more thrilled.
It's a real drag (heh) to drag the GPS all the way from Iceland to England each time I boot the VM in Genymotion. Any idea on how I can change the default location for it? Thanks.
That's the behavior for the "Personal Use" license. The Business or Indie licenses keeps the last GPS position in memory when you turn the device off.
You can also change the GPS position through command line with these paid modes.
BTW, it is not just Iceland's position, it is Dalvik ;-)
After I read this qustion and answer of eyal-lezmy, for a couple of days I thought that how can I overcome this issue . Then I found a solution.
An app might be use that provide a fake location for android.
I use this one. Now I don't use built-in GPS menu of Genymotion.
This is useful when testing my app.
Thanks eyal-lezmy. (I've given reputation)
This is a strange issue which mostly appears on Samsung devices but I cannot confirm its only on Samsung.
My app won't get or update to the correct location fix. It listens to GPS, network and cell providers but the location fix I get is still outdated and inaccurate sometimes the fix is like a day earlier.
I thought it might be a bug in my code but then I opened other apps (Yelp, etc...) and they also have the same problem.
I then open Google Maps and the location is perfectly accurate and up-to-date.
Is this an Android platform bug? Do Maps use a different internal location source provider? Has anyone dealt with this issue before and can provide a solution?
I ran into the same issue.
It is an Android platform bug and it seems that this is an open issue that Google knows about:
https://code.google.com/p/android/issues/detail?id=57707
It is randomly happening.
Google maps is working because their location is based on Google services (Fused Location) which you can also use.
But they also have a bug with the january 2014 update: if you are outside and request a fastest location update rate (e.g. every second) and you are connected to the both network and gps receiver, you will receive a new location only at around 10 seconds even if gps is connected.
They ruined my app which used to work fine with this update and still not fixed to this day!
So what you can do is wait for the fix or use google location service fused location if it fits for you!
Go to settings>wifi>advanced and turn off ALWAYS ALLOW SCANNING