Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Easydeviceinfo | 1,698 | 1 | 2 | a year ago | 3 | March 15, 2021 | 10 | apache-2.0 | Java | |
:iphone: [Android Library] Get device information in a super easy way. | ||||||||||
Unifiednlp | 845 | 4 | 2 months ago | 8 | April 24, 2022 | 91 | Java | |||
Alternative network location provider for Android, with plugin interface to easily integrate third-party location providers. | ||||||||||
Locationmanager | 711 | 13 | 2 years ago | 25 | August 06, 2020 | 1 | Java | |||
Simplify getting user's location for Android | ||||||||||
Locationchanger | 321 | a year ago | 5 | Shell | ||||||
Change OS X’s network location based on the name of Wi-Fi network | ||||||||||
Connmap | 270 | 5 months ago | 6 | mit | C | |||||
connmap is an X11 desktop widget that shows location of your current TCP peers on a world map | ||||||||||
Dnc | 106 | 6 years ago | 2 | mit | Python | |||||
Implementation of the Differentiable Neural Computer in Tensorflow | ||||||||||
Cordova Plugin Advanced Geolocation | 73 | 1 | 1 | 4 years ago | 19 | May 15, 2018 | 6 | apache-2.0 | Java | |
Highly configurable native Android interface to both GPS and NETWORK on-device location providers. | ||||||||||
Wifimatic Android | 62 | 5 years ago | 16 | Java | ||||||
Wi-Fi Matic Android App | ||||||||||
Fwdebug | 58 | 1 | 4 months ago | 33 | June 10, 2022 | mit | Objective-C | |||
iOS调试库,支持iOS11+,无需添加任何代码,方便iOS开发和测试。 iOS debugging library, support for iOS11 +, without adding any code to facilitate iOS development and testing. | ||||||||||
Infostop | 49 | 4 months ago | 20 | February 20, 2022 | 8 | other | Python | |||
Python package for detecting stops in trajectory data |
To get location on Android Devices, there are 'some' steps you need to go through! What are those? Let's see...
Let's assume we got the permission, now what? We have this cool Google Play Services optimised location provider FusedLocationProviderClient which provides a common location pool that any application use this api can retrieve location in which interval they require. It reduces battery usage, and decreases waiting time (most of the time) for location. YES, we want that! Right?
Ouu and yes, this new even cooler SettingsApi, that user doesn't need to go to settings to activate GPS or Wifi. Isn't that cool, let's implement that too!
Well whatever we tried to optimise, right? But till now, all depends on GooglePlayServices what happens if user's device doesn't have GooglePlayServices, or user didn't want to handle GooglePlayServices issue or user did everything and waited long enough but somehow GooglePlayServices weren't able to return any location. What now? Surely we still have good old times GPS and Network Providers, right? Let's switch to them and see what we need to do!
All of these steps, just to retrieve user's current location. And in every application, you need to reconsider what you did and what you need to add for this time.
With this library you just need to provide a Configuration object with your requirements, and you will receive a location or a fail reason with all the stuff are described above handled.
This library requires quite a lot of lifecycle information to handle all the steps between onCreate - onResume - onPause - onDestroy - onActivityResult - onRequestPermissionsResult. You can simply use one of LocationBaseActivity, LocationBaseFragment, LocationBaseService or you can manually call those methods as required.
See the sample application for detailed usage!
All those settings below are optional. Use only those you really want to customize. Please do not copy-paste this configuration directly. If you want to use pre-defined configurations, see Configurations.
LocationConfiguration awesomeConfiguration = new LocationConfiguration.Builder()
.keepTracking(false)
.askForPermission(new PermissionConfiguration.Builder()
.permissionProvider(new YourCustomPermissionProvider())
.rationaleMessage("Gimme the permission!")
.rationaleDialogProvider(new YourCustomDialogProvider())
.requiredPermissions(new String[] { permission.ACCESS_FINE_LOCATION })
.build())
.useGooglePlayServices(new GooglePlayServicesConfiguration.Builder()
.locationRequest(YOUR_CUSTOM_LOCATION_REQUEST_OBJECT)
.fallbackToDefault(true)
.askForGooglePlayServices(false)
.askForSettingsApi(true)
.failOnConnectionSuspended(true)
.failOnSettingsApiSuspended(false)
.ignoreLastKnowLocation(false)
.setWaitPeriod(20 * 1000)
.build())
.useDefaultProviders(new DefaultProviderConfiguration.Builder()
.requiredTimeInterval(5 * 60 * 1000)
.requiredDistanceInterval(0)
.acceptableAccuracy(5.0f)
.acceptableTimePeriod(5 * 60 * 1000)
.gpsMessage("Turn on GPS?")
.gpsDialogProvider(new YourCustomDialogProvider())
.setWaitPeriod(ProviderType.GPS, 20 * 1000)
.setWaitPeriod(ProviderType.NETWORK, 20 * 1000)
.build())
.build();
Library is modular enough to let you create your own way for Permission request, Dialog display, or even a whole LocationProvider process. (Custom LocationProvider implementation is described below in LocationManager section)
You can create your own PermissionProvider implementation and simply set it to PermissionConfiguration, and then library will use your implementation. Your custom PermissionProvider implementation will receive your configuration requirements from PermissionConfiguration object once it's built. If you don't specify any PermissionProvider to PermissionConfiguration DefaultPermissionProvider will be used. If you don't specify PermissionConfiguration to LocationConfiguration StubPermissionProvider will be used instead.
You can create your own DialogProvider implementation to display rationale message
or gps request message
to user, and simply set them to required configuration objects. If you don't specify any SimpleMessageDialogProvider will be used as default.
Ok, we have our configuration object up to requirements, now we need a manager configured with it.
// LocationManager MUST be initialized with Application context in order to prevent MemoryLeaks
LocationManager awesomeLocationManager = new LocationManager.Builder(getApplicationContext())
.activity(activityInstance) // Only required to ask permission and/or GoogleApi - SettingsApi
.fragment(fragmentInstance) // Only required to ask permission and/or GoogleApi - SettingsApi
.configuration(awesomeConfiguration)
.locationProvider(new YourCustomLocationProvider())
.notify(new LocationListener() { ... })
.build();
LocationManager doesn't keep strong reference of your activity OR fragment in order not to cause any memory leak. They are required to ask for permission and/or GoogleApi - SettingsApi in case they need to be resolved.
You can create your own LocationProvider implementation and ask library to use it. If you don't set any, library will use DispatcherLocationProvider, which will do all the stuff is described above, as default.
Enough, gimme the location now!
awesomeLocationManager.get();
Done! Enjoy :)
Library has a lot of log implemented, in order to make tracking the process easy, you can simply enable or disable it. It is highly recommended to disable in release mode.
LocationManager.enableLog(false);
For a more fine tuned logging, you can provide a custom Logger implementation to filter and delegate logs as you need it.
Logger myCustomLoggerImplementation = new MyCustomLoggerImplementation();
LocationManager.setLogger(myCustomLoggerImplementation);
If you are using LocationManager in a
onActivityResult
to fragment manually, because GooglePlayServices Api and SettingsApi calls startActivityForResult
from activity. For the sample implementation please see SampleFragmentActivity.Library requires 3 permission;
ACCESS_NETWORK_STATE
and INTERNET
are not in Dangerous Permissions
and they are required in order to use Network Provider. So if your configuration doesn't require them, you don't need to define them, otherwise they need to be defined.ACCESS_FINE_LOCATION
and it is marked as Dangerous Permissions
, so you need to define it in Manifest and library will ask runtime permission for that if the application is running on Android M or higher OS version. If you don't specify in Manifest, library will fail immediately with PermissionDenied when location is required.<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
You might also need to consider information below from the location guide page.
Caution: If your app targets Android 5.0 (API level 21) or higher, you must declare that your app uses the android.hardware.location.network or android.hardware.location.gps hardware feature in the manifest file, depending on whether your app receives location updates from NETWORK_PROVIDER or from GPS_PROVIDER. If your app receives location information from either of these location provider sources, you need to declare that the app uses these hardware features in your app manifest. On devices running versions prior to Android 5.0 (API 21), requesting the ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION permission includes an implied request for location hardware features. However, requesting those permissions does not automatically request location hardware features on Android 5.0 (API level 21) and higher.
Add library dependency to your build.gradle
file:
dependencies {
implementation 'com.yayandroid:LocationManager:x.y.z'
}
Copyright 2016 yayandroid
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.