Send GPS (NMEA) to a real phone via DDMS? - android

I was having issues with the DDMS's ability to send GPS data to my emulator (i needed speed, accuracy, heading, etc all to change but couldn't get that to work with DDMS). Anyhow, I wrote a quick script to connect to the debug port and send nmea sentences following a track from a gpx file (nmea sentences modelled off an nexus s) but added the extra data i needed. I know there are other gps emulators out there, but for various reasons I ended up writing my own.
The question I have is, is there a way to do this to a real phone? I've trawled through the ddms info i can find and cant find much of use?
I've seen one emulator that can do this via bluetooth, but had trouble with it.

The same way you can send GPS data to a phone, which must have USB debugging and Mock locations allowed in settings.

Related

Android External GPS device receiver

I want to create an Android application which uses an external device's GPS coordinates (because the mobile devices have a less accurate GPS).
The device I am trying to run with is Trimble GPS Receiver Pro 6T
Any suggestions how I can get the data from this GPS device and get this data to the mobile device? I've tried searching for some libraries and guides but found nothing.
The usual way for your case is to use the NMEA format.
Each GPS reciever can be set to output in NMEA format via serial COM.
You parse the socket, line by line.
Searching for Nmea Parser will give you some src code.

Using Garmin GLO GPS receiver with Android application

Has anyone used the new Garmin GLO GPS receiver? Has anyone successfully integrated it with their mobile application? I was interested in using it in order to get more accurate GPS coordinates in my Android application, but would like to get some feedback from others before I buy one.
The Garmin website does not mention if there is an API available to retreive the GPS coordinates, it simply states, "Using Bluetooth technology, GLO wirelessly pairs to your mobile device. Just set GLO within range of your mobile device and in moments you’ll be receiving GLO’s position data."
How can you retreive this position data? Will applications on the device, such as Goolgle Maps, just get this data automatically? Any info or feedback about the device would be greatly appreciated.
More info on the device can be found at the following link:
https://buy.garmin.com/shop/shop.do?pID=109827&ra=true
Todd
This question seems to get a decent amount of traffic and could use a more thorough answer.
Garmin probably feels justified in saying this:
Just set GLO within range of your mobile device and in moments you’ll be receiving GLO’s position data
because on iOS you can connect to the GLO and iOS uses the location information from the GLO to supply more accurate information to any device using the iOS location APIs. Android has no such facility. So, option one is to use an app that will read the NMEA data over BT and use that to set the mock location on your Android device (as Rodrigo said). Option two is what I do in my app: connect to the GLO or other BT GPS from directly in the app. Then I parse the NMEA lines myself and use that within the app. The downside of this is that each app which uses location must implement this themselves.
It's working for me with this app:
https://play.google.com/store/apps/details?id=googoo.android.btgps
It uses mock GPS location to inject the GLO's position.

Test whether the GPS data been deleted

I have written a code in C (sending commands to phone) to delete GPS data (eph, alm, time, position etc) on LG Phoenix phone and i am trying to test if the data has been deleted. What would be the best way to test it?
Call last the getLastKnownLocation() on the GPS provider and see if it returns anything.
Different GPS chipsets stores this data in different locations, so you can never be sure. I don't know what chipset is used in your LG phone. Root your phone and browse the /data/ directory, usually you'll find something like /data/gps/.
The external symptoms of deleting this data is that of a cold start. That is, if the device is not connected to the internet, and it is somewhere outside, it will take 2 minutes or longer to get a GPS fix. So that's how you'l know.

How to send "geo fix" command to real device of Android?

First,thank you for your attention to my question
I'm planning to design an Android GPS locating application
here are my difficulties and situations
(1)my computer hardware has been out of date for a long time and running an android emulator for debugging is really time-costing,thus i bought a real device(android cellphone) one week ago,in the aim of replacing emulator during debugging
(2)i know how to send location datas to an emulator via "DDMS/Emulator Control/Location Controls",but it is disabled for a real device
(3)i am programming indoor,thus using physical gps locating function is not acceptable(even if i turn on "a-gps")
(4)i have found another topic here: Android mock location on device?
however,i can't open the detail links,like "Andrews link"," http://dehuysser.appspot.com/blog/android-developer-shell-released"
I guess these web sites are forbidden by my country......
Here are my questions:
(A)i have found some codes of making mock loation datas ,but these codes can not activate "onLocationChanged" function
However, i wonder if there is a way to send locating datas from PC to real device via USB port(i'm in USB debugging mode), just like sending locations from DDMS to emulator?
(B)i've got the information that, it is possible to send "geo fix" command to emulator as well as to a real device, by "telnet localhost ", but how to check out the port number occupied by my real device?
i know that 5554 port is used for a emulator,but what about the real device?
i've tried to command "netstat" in terminal, but it's a shame to say that i don't know which port is for my android phone......
(C)If my (A)(B) question is not practical,then what's "settings/applications/development/allow mock location" used for?
Please help me, and thank you for your answer!
I have wrote an app exactly for this (this functionality is not available on phones by default) - it's open source and provides exactly the same interface as the emulator (telnet to :5554 and run "geo fix ..." or "geo nmea"): in app store MockGeoFix
The easiest way of using mock data is using the mock test location provider API. It's at the bottom of the documentation page. I've tried it out and location is received in the onLocationChanged callback. Here is some code that you can try out.
The port used by adb is usually 5037.

Use Android GPS to detect and connect with other phones

So I asked something similar yesterday and did receive an answer to my question, however I don't really think I asked it correctly and therefore didn't receive the exact information I needed.
I'm in search of an API, some open source code, or even just a way that someone else has achieved this on the Android. I'm making an app that needs to find all other Android devices within a specified radius. For example, when you open your Android Google Maps App, and you search for say "Restaurants [ZipCode]", it uses a radius modified from your zip code and finds all of those places. The GPS gets YOUR location, and maps uses that information to find restaurants within an address close to that passed in location.
Instead, I want to be able to use the GPS to find my location (as it can now easily), but instead of finding things on a map (which is already built in), I want to be able to find other GPS enabled Android phones. I get that they will have to be broadcasting their GPS signal at the same time as well (since they don't have their data stored with some sort of central database as a restaurant would). However, I don't just want to FIND these phones, I want to send/receive data from these phones (with correct permissions obviously).
Now, I've found things like the Bump API. However, BUMP uses the phones sensors to spark this search. So basically, if you "bump" your phone with another and have the app running, it will THEN go ahead and use GPS to find the location of the other phone you just bumped with and exchange data between them. This is like EXACTLY what I want to do however in their API, they do not provide the functionality to just say, "Hey, give me all phones within a mile from me."
I've also found API's that can do exactly what I need but they have to be on the same Bluetooth range or on the same Wi-Fi network, which doesn't suit what I need at all.
Do you guys know of anything that can fit exactly what I need that already exists? Or a way to maybe modify Bump API (if you've done it), to not have to use the phone sensors and find phone information directly through GPS for phones around you? Or is there something that exists over a 3g/4g network instead of only wi-fi/Bluetooth?
Thanks guys.
Instead of frequently posting locations to an external server, couldn't the GPS realize other things broadcasting a GPS signal at a very specific time and send/receive data from them?
The only things that are "broadcasting a GPS signal" are satellites.
We would like to accomplish this without the use of an external server.
You have no choice but to use an external server, whether you like it or not, both for discovery and for later communication.
Do you guys know of anything that can fit exactly what I need that already exists?
Foursquare, Google Latitude, Yahoo Fire Eagle, and so on.
To do this via GPS, you would have to have all the phones frequently posting their locations to a network server, which could then inform them of others nearby.
Needless to say this would be opt-in only!
And it may have negative consequences for battery life, unless you make it update infrequently, which may limit its usability.
The advantage of having an explicit trigger action to both phones is that they only need to query the GPS and inform the server to find each other by location when they've both been triggered.
You would probably have to author your own application - then you could do this server-side and push things. If you're trying to push data to random Android phones - you're out of luck. Most people aren't going to want this, and probably aren't going to have the apps necessary to receive and understand it. With Bluetooth networking you'd need authorization, and most Androids don't have a capability to transfer random data by Bluetooth out of the box (though you certainly can get software to do it).
Honestly, malware and tracking are the reasons this really isn't possible, but even if they weren't, you would still need an application on the receiving devices that understand what you're sending them. And if you're widely spread enough, you'd probably want to send it to a server to disseminate anyway (for the transmitting phones bandwidth costs at least).
Develop a server application that your android app logs into. Send the GPS location every time the phone moves over a present distance. Either send a query request to the server to ask it if any other phones are in range, or get the server to inform the phone of a new device in range.
You may run into server scalability problems, so thats something to think about.
Also, this would be a big battery drain, and so your users may not be too keen to run it, not to mention the privacy element.
You need to rethink what you're trying to do. Android devices don't "transmit" any GPS signal, they are simply receivers, with signals from satellites. So the phone can easily get a location for itself, but the location of other devices is very, very private information. To get access to location for other phones, you either need to be on the same network as them (bluetooth, wifi), or you need them to use a server-based service to send locations to, like Google Latitude.
I'd be highly unlikely to sign up to a service like that. My location is very private, I share it with some people, but I cannot seem myself openly sharing it with an app, without a very, very good reason.
It seems to me that you need to build a server-based application, e.g. on Google App Engine, have people sign up, and agree to their location being sent to that server, so other phones running your app can access that information from the central store.
The question now has a very simple solution to it. All you have to do is set up a Geofence and monitor it for entry and exit of users. Geofence allows you to choose a geolocation and set a circle of desired radius around it. When someone enters or exits the location you can get notified and perform desired action.
Visit this link for further details on how to use this in Android.
All the comments from other folks about not being able to pick up the signal from others phones are correct. There is a completely different alternative system however in the network based location services. This is a model where you ask a carrier network for the location of a handset, which the carrier network needs to track for enhanced 911 service in the US (I'm unaware of how widely deployed this is in other areas, and how many different services you would need to use to cover other areas).
It's potentially a very expensive route however. And it won't just automatically work for all handsets, I believe the users will have to be opted into sharing location with your service. This is how services like Loopt had initially setup their location info so that it could be passively collected without negatively impacting handset battery life. There are some third party services that front for a cross-carrier service such as Location Labs:
http://locationlabs.com/
As well as third party location services like Skyhook Wireless, who might be able to get you some info of the sort (though I don't think what you're looking for maps to any of their existing APIs)

Categories

Resources