Is there a way to know which applications track users? - android

I'm developing an Android application that shows on a map all locations gathered by the applications of your smartphone.
To do so, I'm using the passive location provider, which do not actively uses the GPS to obtain locations, but rather transmit those generated by other providers.
Problem with this provider is that it only returns Location objects, which (I think) do not contain any information regarding who asked for the location.
I understand that, from a "system" point of view, this information might be considered as sensitive, but I'm looking for a way to associate a location with the application that asked for it.

You must give permissions to apps (android 6 and higher), which wanna know your location. So, check application permissions.
Otherwise, i would recommend to use local proxy server(eg charles, fiddler) to track all network activity and hunt down applications what track your data.

Related

Using Android internal API to turn on GPS

Is there any hidden (internal) API function for turning on/off the GPS? Is it a valid solution (legally and safely) to use android internal API's? If it is not valid, how can I obtain a license/signature for using those API's?
I have already tried the methods using SDK/NDK and I understood that it is not possible to turn GPS on with the SDK/NDK (I know that we can bring up the settings screen). I want to know whether there is any hidden/internal API's for doing that. Also I am not interested in using any vulnerabilities in Android as a solution.
You need root privileges. Mandatory. Period.
And yes there is API to enable/disable GPS. But the application must receive SuperAdmin privileges. To obtain it either root or custom ROM required.
Sample: https://github.com/sms2000/GPSToggler
There is no hidden API for controlling the GPS. There is no valid solution.
(Like you mentioned), the correct thing to do is ask the user to turn it on. If an app could override the users option, there would be no point in it being an option and this would be a huge security rick.
If the user chooses to keep the GPS off then your apps should do the same thing it would do if the GPS was on but couldn't get a lock. Not respecting their wished to keep it off would be malicious even if you don't plan on doing anything morally wrong with the data.
If you have some client that wants their employees to not be able to turn off the GPS, then you need to give them phones with custom roms.
If you are trying to make a security app that reports location you can use wifi location and last known location too in addition to GPS.

Location within a building using the wifi hotspot

I am trying to build an android application which changes the alert profile of the phone according to the location. I am using Google maps to get the location of the user. But this gives me the location only up to the granularity of a building.
For example, Google map might tell that I am in my office building, but not whether I am in a meeting room or the pantry. And I might want different profiles for the two places.
Assuming the building has a separate wireless router in each room, I plan to use the wifi hot spot to get the precise location.
Will this be possible? Is there a service/app already existing for this?
Any other ideas to achieve this are also welcome.
That's an active research topic that has no real solution yet. You might be able to get information about signal strength of close hotspots (don't know of there is an API in Android for that) or at least the BSSID of your current hotspot (there is an API for that AFAIK) and decide based on that where you are.
If there was a great solution to do that Google would have probably done that already (they have to a limited extend: http://googlemobile.blogspot.de/2011/11/go-indoors-with-google-maps-60-for.html)

Find Caller Location while Talking on phone using android

I am new to android and I want to implement finding the location of another phone and displaying their location on my device using Google Maps while I am talking with that person.
Considering the fact that currently I'm not aware of a phone carrier company providing an API over the cellular network or a server to access other phones' locations, you'll have to implement the infrastructure yourself.
By that, I mean both the on-phone applications designed to transmit and receive location data and the means to communicate this data between phones, when a call is placed.
It would be easier at this point if you could programmatically embed metadata in the caller id information of calls you place from an Android phone, but unfortunately I don't think that such an API exists at the moment.
This leaves you with only two other options: have the application on the caller phone send the location data either through a server that you control, or through an SMS message to the number it's calling.
Using a server only works if both phones are connected to the Internet, so you must rely on data traffic to work for the location data to be transmitted.
Sending location data by SMS incurs some kind of cost for your user, as it either subtracts from the available number of SMS messages included in their carrier plan, or simply charges them extra if this plan is already over capacity.
You may offer a clear alternative, that the user should be informed about, to use one way or the other; depending on the application's scope and purpose, each of these alternatives may be suitable (I'm thinking of this feature only activating for some specific phone numbers, in case you'd use this app inside a company that deals in on-site interventions to some kind of emergencies, that require automatic location reportning at the time of certain calls from the field).
You have two options - both of them probably not so feasible:
1. Having an application running on the other phone which is designed to transmit the location to wherever needed.
2. Having the phone carrier company(s) providing you either an API over the cellular network or via their server an access to the other phone's location.
Good Luck

how to make location stable on android

I try to receive latitude & longitude on android phone.
Is location on android receive directly from satellite?
Why it dynamic all the time, while I standing though?
So, anyone know how to make it stable ?
Thanks
The location may come from a variety of places:
The "last-known" location, an OS-level cached location (fast, but may be inaccurate)
The wifi network (Google can often deduce location from the wifi net you're on, but not always)
Mobile network - if the device is on a mobile phone network, that can provide location information
GPS receiver. If the device is outdoors this will provide the most accurate location
Your app will have specific needs, and so you need to decide which locations you want, and what you do when you get them, based on their accuracy, and the source.
With GPS, buildings, tees, the weather, etc will all have an effect on the location, so you'll never get one amazingly accurate location. Many apps just request a location and use it, but if you need accurate, stable location data, you need to collect data from relevant sources, and then use your own algorithm to decide which to use.
You need to read, understand, and use what's in this page:
http://developer.android.com/guide/topics/location/obtaining-user-location.html

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