Getting Locations Best Practice - codenameone

What are the best practices one needs to know when trying to get the most accurate location coordinates from a user.
How can I explicitly get location using the user's gps? How can I also ensure getting location using the network is accurate? I am asking because when I get location while I am home..by the time I get to the office, the location I get is still the same which isnt supposed to be so. Does it have to do with my listener?
Any help/code snippets will be appreciated.
Salam

Modern Android devices and all iOS devices don't use GPS as much as they use hybrid location. Hybrid location correlates all sensor information (including gps) to give a location as accurately and quickly as possible while reducing battery usage.
This is on by default in Codename One if you don't do anything like explicitly specifying that Google Play Services shouldn't be included or if you include google play services other than location (without including location via the build hint android.playService.location=true) this won't be used either. In those cases Android will fallback to use GPS which is slower.
You can read more about build hints here.
Notice that even then getting location takes time so make a request so you should use the getCurrentLocationSync() method or the location listener API to make sure you get a more accurate reading.

Related

How to detect user location?

recently I need to detect user location in an app. As you can imagine, there are many (obvious) solutions but I would like to have something like TikTok has in 2021.
After testing their method with virtual and normal devices, with VPN, with GPS mocking, simulated WIFI and Mobile data networks, and email addresses from providers stipulated in different countries, I still could not figure out how they detect my location and thus provide me content. Therefore, I consider their method superior over simple GPS or IP address-based methods. However, I wonder how they do it!
Any idea?
ByteDance (the company behind TikTok) uses your IP address and internet service provider info to get your approximate location, like a lot of other websites do (e.g. Athens, Greece). Google does this too - search anything you want and then scroll down to the bottom of the page. You can find your approximate location there.
I don't know how do they get this info, however, as I have not worked with networks and such.

Is there a way to save offline google map on hybrid mobile app on ionic?

I am planning to develop a hybrid mobile app using ionic. One of the features i need is offline google map. Is there a way how to do it?
It depends on the requirements of your application whether this will be possible. Are your users on "modern" devices A.K.A is HTML5 fully supported? Do your users need to view/edit the map globally, or just in a specific area? Does the map really need to be provided by google? I'll address some issues below to point you in possible takes on this problem.
Do you really need google maps? (Most optimal scenerio)
First of, do you really need google maps? Also relevant: how far do your users need to zoom their maps? If it can be any maps, and zooming is not really of high priority (if it is, including all map tiles will make the app eat all storage), you could probably use map-tiles as a packaged part of your app, and display them with a library like http://leafletjs.com/. The library is well documented, and provides a map-interface for a variety of map-providers. It will be do-able to configure this to use your own local map-tiles. You could include map-tiles for multiple zoom levels if necessary, and limit the min/max zoom-levels to the tiles you actually have available. This will make your maps work offline.
I can't or don't wan't to provide my own tiles make sure that you really looked into the option, there is systems out there that provide map-tiles you could use (check https://www.mapbox.com/ for example)
Okay, so you really don't want to do what I suggested. What are the options now? Javascript mapping-solutions typically render tiles based on the location of the map you want to see and the zooming level. These tiles are requested to the tile-provider. I do not know how to implement this for google exactly, you might need some research on this - I'll try to help you see a direction. There will be requests to get the tiles from the servers. I checked with http://maps.google.com what images are loaded when trying to navigate the map: (example (click)). Find out what url's are used in your situation, we will need these kind of url's later (just inspect the network tab in your browser console and see which requests are made when scrolling in your map). When we only need our users to work in a certain area when offline we could use service workers to cache the responses of these requests when we are online, and serve those caches when we are offline. Read more on service workers here (click).
Advantage: Real offline map-functionality for any tile you visited before (as long as your cache wasn't overflown, depending on your implementation of the service workers, and for service-worker supported browsers/devices).
Disadvantages: No support for tiles that were never put in the cache (AKA: never seen before). Another one: this will only work for devices that support service workers. Might be an option in situations where you either don't care about users using "older" devices, or where you can control the user's device choices. Note that using crosswalk could ease your developing efforts here, since you only have to consider one browser-runtime then: but crosswalk also doesn't support older devices.
However: This solution could be fine for people that will need to work in a specific area, which might be true for the case provided by #vipul-r If you or your users know in advance where they need their maps to work, you can instruct/help them in loading & caching their maps correctly.
If you can't work on either of these 2 solutions, then I highly doubt there will be a way to do it. I don't see any other way to the best of my knowledge.

Touching two phones together to send data

I'm trying to develop an application like Bump to receive data from another device by touching them together. I could not find any tutorial on Google about this. Can somebody help me make an idea about how this works? What programming language should I use, how can I do it by using Bluetooth or/and Wifi, etc? I only need some info. I don't know where to start. Thank you!
If you want to create something like bump for iPhone, you could code it in Objective-C or swift. (Based on preference) For android you would code it in Java. To make this bump you need to create a trigger that detects a shake gesture on the device to trigger additional code. The additional code will take the location and the time of both devices in the bump and save it into a database. You need to check the location and the timestamp and compare those values. If is the same location and at the same time you know those are the two devices in the bump. After you know the devices involved you can send whatever information between those devices. Hope this helped.

Trigger.io getting gps coordinates

I need to find the GPS coordinates of the device running my Trigger app. I need these coordinates to be as accurate as possible. If this were a native app, I would have the option of specifying the location provider (in this case I would specify gps). How do I do this in Trigger? The documentation for geolocation mentions that getCurrentPosition has a parameter for options, but does not explain how to communicate which provider I need.
forge.geolocation.getCurrentPosition uses assisted gps if it's available.
So it will provide the most accurate location position we can - obviously if the user has manually disabled gps, then it will use less accurate network location.

Wayfinder - Pathfinder Application

I want to create wayfinder/pathfinder mobile application. it will route visitors in our buildings. we have 20 buildings and each at least have 4 floor.
We want to develop our own wayfinder ex:http://www.wayfinderkiosk.com/
It should use Lat/Long coordinates to locate the people. and help to find its route.
So where should i start. Does any one have any idea for that. and it is going to be mobile.
I can develop app/site based on these platforms ( Mobile Web/Iphone/Adroid /Symbian/Windows )
But i need a start point. and i need your help.
Thanks
You want to use lat/long inside of a building? Assuming these visitors are going to be using their own unmodified devices, you may have trouble with GPS. Unless you somehow get reliable GPS signal despite being under a four-story building, that's probably not going to work.
An RFID-tagged badge and sensors placed throughout the building seems more likely to work. Put a unique QR-code on each badge that directs the phone's browser to a tracking page for that specific badge.
edit: and now that I re-read your question and see that multiple buildings are involved, the GPS bit could certainly work for routing them from one building to another.

Resources