I was trying to debloat my system from all Google Apps, including Play Services...but I noticed something wrong about position.
Almost all gps/navigation apps use the location provided by play services, and without it, they aren't locking the position (of course).
Is there any workaround about this? And why apps do not use the so cool location Manager? It's kinda frustrating.
The reason is how Google manages Android. They do make the manual pages so they can say whatever in them to throw you to their fishing net. For example see the huge note in top of Location and Maps manual.
Note: This is a guide to the Android framework location APIs in the
package android.location. The Google Location Services API, part of
Google Play Services, provides a more powerful, high-level framework
that automates tasks such as location provider choice and power
management. Location Services also provides new features such as
activity detection that aren't available in the framework API.
Developers who are using the framework API, as well as developers who
are just now adding location-awareness to their apps, should strongly
consider using the Location Services API.
To learn more about the Location Services API, see Google Location
Services for Android.
As you can see, the developers are directed to NOT use Android framework APIs. But why you think Google does not develop Android instead? Because using Google APIs will tie you to Google so you can't live without it. It is a way of creating addiction.
In addition, this also helps Google to collect location information every time your app requests location. So basically Google feeds on your apps location data like a leech.
Google really balanced Android in a way that other companies can use the OS. But the OS will be useless unless you install Google services. It is somewhat evil perhaps (but who will notice that right?), but a win/win scenario, for Google that is.
To answer your question, no the app's which were coded to use Google API services can not function without it.
Related
I'm working on a mobile app project that uses Google Places APIs and have some questions:
From my research in Google documentation, they allow FREE and UNLIMITED use of their Google Places API data when used by Android devices. Currently, my development team is accessing Google Places Web Services API for all API calls. For the Android devices, should I have them change to use Google Places API for Android in order to take advantage of this?
I read in Google's API policy that they may allow for caching of API data (with limitations - i.e. you must refresh every 30 days, etc) if you want to increase performance of your code and/or use in offline mode, etc. However, it says you must get their permission for caching from Google. I cannot find how or where to request this permission. Would be helpful if you can point me in the right direction with a form or a link or something.
Appreciate any help. Thanks.
Before developing an application I researched what solutions might apply while creating lightweight application with maps for Android.
Basic usage of app is while hiking and therefore below are requirements app must meet:
Must be using hardware resources as few as possible.
Must have ability to save map data for further offline usage for selected local area.
Must have ability to load custom data generated by 3dparity like kml files and custom markers.
Application basic flow is:
Some site community contributes custom markers and kml (or other layer data type) files for desired region.
Application combines some map provider map (like Google Maps, OpenStreetMaps) + Community data for desired region and gives offline usage ability to users. Where users can prepare map with internet connection before hiking and use it offline while hiking.
Strategy and primary problems to solve:
Choose lightweight map sdk.
Solve offline maps problem.
Choosing lightweight maps sdk and problems related to it:
While hiking people often use older versions of smartphones which drain less battery power because they come with older version of Android therefore apps for older versions of android use less computing power.
Common solution here is Google Maps SDK 2.0 which by itself is provided by Google Play SDK but Google Play SDK is getting heavier over time and it requires that user had installed almost later version of Google Play Services as I guess.
Pros of Google Maps SDK 2.0 is that it provides great codebase for further extension and also a great MapView component ready with all UI tweaks.
Cons of Google Maps SDK 2.0 is that it requires user to have Google Play Services installed which by itself drains phone charge. Also new MapView UI components might require more computing resources.
Solving offline maps problem:
As I researched it is possible to provide custom tiles stored anywhere on device in Google Maps SDK 2.0 using TileProvider interface which gives great controls over tiles. Main abstract method of it is:
public Tile (int width, int height, byte[] data).
Other SDKs:
MapBox android sdk comes closer to Google Maps SDK 2.0. It is promissing but is still beta and is opensource. Compared to other less known android map sdks MapBox has gentle documentation, nice tools, is almost lightweight and has community but comes with still bugs.
Also I tried an app by my opinion developed using Google Maps SDK 2.0 https://play.google.com/store/apps/details?id=com.vecturagames.android.app.gpxviewer
In my best guesses this app is using Google Maps SDK MapView to display maps from various sources like OpenStreetMap, MapBox and from almost every map provider available online including google.
Questions:
What are your best practices for developing lightweight apps for android with maps and offline tile base support?
Is it possible avoid Google Play Services dependency while using Google Maps SDK 2.0?
Are there any other opensource map sdks which are performance friendly? For example using OpenStreetMaps map base.
I'm writing an app that needs to determine whether a user falls within one of several defined zones (based on gps location).
The Google maps javascript API has an easy to use function containsLocation(). However I want to be able to do this from an app on android, not a web-based service. Does anyone know if such a call exists in the android version of maps? Any pointers will be helpful!
A bit late, but here's the answer: com.google.maps.android.PolyUtil.containsLocation() from Google Maps Android API utility library.
You can use the Geofencing feature for this purpose. The API's for that are a part of Google Play Services library and hence you can start using it by importing it into your app project.
It even gives the notification if a particular user has entered or exited a specific geofencing location in order for a developer to monitor the number of mobile devices entered in the zone he defined. The implementation is pretty simple, I am pasting some links that may guide you further.
This is Google's official documentation about Geofencing:
http://developer.android.com/training/location/geofencing.html
This link actually implements an app for geofencing.
And this is another link if you want to use a third party plugin in order to get geofencing in your app.
Hope this would help!!!
I'm currently using Google maps API and directions API for getting routes, however there is a limitation upto 2500 requests per day. so while searching for a way, got confused after i came across this link..
Google Maps Mobile SDK for Business: Android
Can anyone please explain the difference between this sdk and google maps API..?
its basically a software development kit that makes use of the google maps api and helps you in development of apps that use those apis... if request limitation is an issue try other opensource apis like argcis or tomtom etc
In order to use the individual SDK such as map, you would require a key. That key is persistent, meaning once you have one, you can keep using that same key in your app manifest, regardless of how many copies of the same app you have.
However, there is a daily limit imposed on how much keys can be requested per day from google to prevent abuse. With that said, I don't think you would have a problem of requesting one. If it is given out for today, just wait till tomorrow and the limit would be refreshed.
As for the Enterprise version, you get more support over the normal version. The main differences is that you get the Business SDK as a static library rather than one using the Google Play Services. That is all.
I currently am planning a small, but useful, addition to Google Maps for Android. I was wondering if I could create a .apk file that, when installed, adds a feature to the stock Google Maps for Android. The only thing I have found is Google Add-on API, although I don't think this is what I want.
If I use the above add-on API, I would be able to create a stand-alone application which fully implements Google Maps API... right? Please give me some clarity here, and let me know if I'm missing something.
The Google Add-on API is a set of classes that allow you to show google maps inside your application. Most apps use this for simply showing a map with some sort of marker on it.
The out of the box functionality is fairly limited and not nearly as feature rich as the google maps application. With enough time and effort you could possibly build a replacement for google maps but it's not as simple as just adding on functionality.
See here for a guide on how to get started using the APIs.
It now is possible to create plugins for google maps or any other app provided you have root access for your android device. once you have the root access, you can use the Xposed framework created by one of the XDA recognised developer rovo89
Please note that this will be only available for the rooted devices that have this framework installed. Again this is an indirect way to enhance any application deployed on your device provided you have an idea of which methods you need to hook into. in the same thread mentioned there is also a link to toutorial which explains how to use the xposed framework to modify and create your own mods.
For non rooted devices, unfortunately, there is no way to implement this functionality.