I want to calculate the speed of user on WiFi. I am getting location updates via. onLocationChanged() but every time hasSpeed() returning false and getSpeed() returning 0.0.
Is there any API available to get speed on WiFi or I need to calculate speed manually? Any help or guidance will be well appreciated.
Note: I am able to get the speed on GPS.
You won't be able to use getSpeed() when the user is only connected to WiFi. WiFi location works based on known locations of networks the phone sees. Unlike GPS, this will only ever provide a rough location, so there's no way to calculate speed.
Think about it like this: If I start at point A and walk 10 feet to point B, will there be any chance in the WiFi networks I can see? Probably not. Will be there be a change in my GPS coordinates? With a decent view of the sky, yes.
Related
I am working one of the application which need latitude,longitude and altitude. And I have succeed for fetching Latitude and Longitude using Fused Location but I would like to get altitude or elevation from android device without Internet.
This application gets all 3 params i.e , Lat,Long and altitude without Internet. How it is possible?
https://play.google.com/store/apps/details?id=com.ilyabogdanovich.geotracker&hl=en
Based from this thread, you don't need internet for GPS.
GPS is basically a satellite based positioning system that is designed to calculate geographic coordinates based on timing information received from multiple satellites in the GPS constellation. GPS has a relatively slow time to first fix (TTFF), and from a cold start (meaning without a last known position), it can take up to 15 minutes to download the data it needs from the satellites to calculate a position. A-GPS used by cellular networks shortens this time by using the cellular network to deliver the satellite data to the phone.
However, all that is derived that is Geographic Coordinates (latitude/longitude) is impossible to obtain more from GPS only. So you need an internet connection to get the Lat,Long and altitude.
You may also check this thread: Use FusedLocationServiceApi without internet connection
Is it possible to get the coordinates only with the mobile network enabled?
I need to get the coordinates within 30 seconds. Because when the user clicks the button to hide, it can not be too long to get the coordinates.
I can not use NETWORK_PROVIDER to get the coordinates of the Wi-Fi network because the user will be on the street and not connected to a Wi-Fi network, but will have the mobile data network connected.
Is it possible to get coordinates over the mobile data network?
I know GPS_PROVIDER is slower than NETWORK_PROVIDER, so I'd like to know if it's possible as I said above. Thank you!
Is it possible to get the coordinates only with the mobile network enabled?
Yes. For example, navigation apps work while driving in open spaces, far from any WiFi.
I need to get the coordinates within 30 seconds
There is no way to guarantee this. There is no way to guarantee that you can get a GPS fix in any amount of time. There are plenty of places in the world where it is difficult to get GPS signals.
The app which i'm writing need to somehow detect if an android device is indoors or outdoors. My goal is to detect if the user left a certain building as soon as possible.
I tried to use the user location signals. I'm not initiating any GPS sampling since I don't want to waste too much battery power, so the only way to detect if a user left a building is to wait for him to be far enough from the place and then use location signals which were sampled by wifi or cell.
The problem is that it takes quite some time for me to detect that the user left the building.
I know that when a user is indoors, his GPS signal is weaker. Can I somehow use the GPS status to find out if the user is indoors or outdoors? Will it be wasteful as initiating a GPS location sample?
Thanks.
I don't think you can do what you want to do with the FusedLocationProvider as this uses WiFi and cell tower triangulation. You will need to use the LocationManager.
It is also difficult to detect if you're inside and as far as I know there is no definitive way of doing this. You can make informed guesses however.
In terms of detecting a "weak" GPS signal you have a few things you could check:
The number of satellites available to you. If a low number then you are either indoors or somewhere with poor satellite coverage.
The horizontal accuracy of a received GPS location. If this value is high it can be deemed as poor accuracy which could be because you're inside.
No location has been received for a period of time. This could be because you're inside.
Have you thought of doing other checks as well as GPS so if they're connected to WiFi it increases the likelihood of them being inside?
When moving a big distance, like to another city, with the GPS off, it takes very much time for it, when turned on, to get the first correct point.
So if by example I register to the gps provider, it could take up to 10 min until the first onLocationChanged call.
The network provider will respond faster, but is less accurate.
Is there a way to help the gps provider? To give it an approximate location (the one from the network provider), so it can find my location faster?
I think that google maps made some kind of optimisation, because their app finds my location faster than my basic app, that only register to the gps provider.
Any idea how I could accelerate the process of obtaining my location with decent accuracy ( <30 m) ?
You are right that if you move a long way with the phone switched off, then it can take a long time to get a satellite fix. This is where AGPS helps. The 'A' stands for 'assisted' which is very much carrier and handset dependent in its implementation. In essence it gets an approximate location from cell towers or from public WiFi like coffee shops and then downloads ephemeris and almanac data which tell the phone which satellites are likely to be overhead at that time in that rough location. The phone can then start listening on the frequencies corresponding to the visible satellites first. This should speed up the time to first fix.
Common practice is to use WiFi SSIDs or the location of the cell tower you're registered with to look up your current location via providers like WeFi or Skyhook. Google uses its own service for that (and sees that no one else does).
Another method would be, in case your smartphone has a barometer, to look up the air pressure and try to pin it down to a location. While all these methods can theoretically be used offline, it is easier to fetch the data from the internet.
Also note that inaccurate NTP settings on the phones may lead to longer GPS search times.
Is there a way to help the gps provider?
NickT has answered this, but the android phone has to call the AGPS. In your app you cannot controll that.
I think that google maps made some kind of optimisation, because their
app finds my location faster than my basic app, that only register to
the gps provider.
This should not be the case, probaly you are doing something wrong, or the google app can enable assisted GPS. Try to compare with other android GPS apps (e.g compare with Motion-X-GPS)
it could take up to 10 min until the first onLocationChanged call.
Normally this is far too long, either your phone is known to have a weak GPS quality, or the device did not have free view to open sky. Even without assisted GPS, after 45 seconds, you should have a valid GPS position (asuming free view to open sky).
But this situation can happen, either the first time you use GPS on your device, or when you fly by airplane to a location far away to your last GPS position.
On my iphone i rarly saw such a situation when another GPS app was somehow disturbing, after a reboot of the device the GPS was immedeatly valid.
Again check if it is the fault of your app, by comparing if other apps needs 10 minutes too. (It could be your fault, when you wait to recieve an accuracy <30m while other apps would take the first valid position they get.
If google needs 10 minutes, too, then you could do nothing on that phone, except to expose it to good view to sky.
(Inside an urban canyon it's more difficult to obtain a valid first fix, then on an big place.)
Hey I am beginning to look into making an android app. Trying to use the phonegap right now.
I was just wondering about the geolocation service. It seems the address is always a few block off of my actual location. Even if I have it set to enable hight accuracy. How come GPS people have in their cars know down to the location on the block they are on. Is there a way to get an accuracy like this with android? Or is it easier to get better data when moving?
Do you have GPS enabled? Android phones can get location based on network (GPRS, EDGE, 3G, UMTS, Wifi, etc) or GPS. If you have GPS enabled you'll get better location than only network, which gives you a range, a circle where you are in.