- Search any location using Google Places Library
- Pick any location from the map
- Edit Location and add more Details
- Get location in a bundle with city , pincode , state etc
- Open the picked location on Google Maps
- Search the Direction to the picked location from current location (using Google Maps)
Gradle Integration
Add it in your root build.gradle at the end of repositories:
step 1:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
step 2: Add the dependency
dependencies {
implementation 'com.github.shivpujan12:LocationPicker:2.0'
}
Follow below step to use LocationPicker Library
- Configure your app in Google API Console to get API Key and enable services.
- Enable below services in API Console.
Google Maps Android API
Google Places API for Android
- Declare the following things in manifest in AndroidManifest.xml file
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
inside <application>
tag add <meta-data>
as shown below
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
....
....
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/your_api_key" />
</application>
Note: Create the 'your_api_key' string resource and add your api key there
-
To use the LocationPicker in your activity add the following code:
i) Inside onCreate method intialize your api key as below:
MapUtility.apiKey = getResources().getString(R.string.your_api_key);
Note: Create the 'your_api_key' string resource and add your api key there
ii) Start Location picker request by putting below code in your view
Intent i = new Intent(MainActivity.this, LocationPickerActivity.class); startActivityForResult(i, ADDRESS_PICKER_REQUEST);
-
Handle your onActivityResult for getting address, latitude and longitude as:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ADDRESS_PICKER_REQUEST) {
try {
if (data != null && data.getStringExtra(MapUtility.ADDRESS) != null) {
// String address = data.getStringExtra(MapUtility.ADDRESS);
double currentLatitude = data.getDoubleExtra(MapUtility.LATITUDE, 0.0);
double currentLongitude = data.getDoubleExtra(MapUtility.LONGITUDE, 0.0);
Bundle completeAddress =data.getBundleExtra("fullAddress");
/* data in completeAddress bundle
"fulladdress"
"city"
"state"
"postalcode"
"country"
"addressline1"
"addressline2"
*/
txtAddress.setText(new StringBuilder().append("addressline2: ").append
(completeAddress.getString("addressline2")).append("\ncity: ").append
(completeAddress.getString("city")).append("\npostalcode: ").append
(completeAddress.getString("postalcode")).append("\nstate: ").append
(completeAddress.getString("state")).toString());
txtLatLong.setText(new StringBuilder().append("Lat:").append(currentLatitude).append
(" Long:").append(currentLongitude).toString());
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
To open the LocationPicker with pre-selected location, just add extras to the Intent as below:
Intent intent = new Intent(EditorActivity.this, LocationPickerActivity.class);
intent.putExtra(MapUtility.COUNTRY_ISO_CODE, "US"); // Only show US locations
intent.putExtra(MapUtility.ADDRESS,address);
intent.putExtra(MapUtility.LATITUDE, latitude);
intent.putExtra(MapUtility.LONGITUDE, longitude);
startActivityForResult(intent, ADDRESS_PICKER_REQUEST);
> The library is referenced from https://github.com/Intuz-production/AddressPicker-Android