I am developing an application , when use click on image, google map should be open,when map open first it show the current location of user ,after when user click any where on map marker should be placed on submit it should take a street name ,pincode(zipcode) ,state and country and want this data automatially to be filled in editbox. I am new android so not understanding how to do it Thanks in advance
Asked
Active
Viewed 1,531 times
0
-
you will need an api to do it. google has a places api that does that. https://cloud.google.com/maps-platform/ – Angel Koh May 10 '18 at 05:56
2 Answers
3
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
Geocoder geocoder;
List<Address> addresses;
geocoder = new Geocoder(this, Locale.getDefault());
try {
addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
String address = addresses.get(0).getAddressLine(0);
String city = addresses.get(0).getLocality();
} catch (IOException e) {
e.printStackTrace();
}
Please Note :
location.getLatitude() = your latitude value,
location.getLongitude() = your longitude value.

Dhara Jani
- 461
- 3
- 10
-
when user tap on the screen it automatically take latitude and longitude value? – user8472639 May 10 '18 at 07:47
-
-
https://stackoverflow.com/a/33291227/9423249 Using this you will get latitude and longitude value. For Opening map you need google map integration steps. – Dhara Jani Sep 21 '20 at 12:48
1
In order to achieve this, you need to follow some steps.
Step1: Adding Location Api Lib:
implementation 'com.google.android.gms:play-services-location:11.6.0'
Step2: Add metadata to AndroidManifest.xml: replace 'key' with your Api-key
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="key"/>
Step3: You need a service and one activity to work on:
1.AddressListActivity.java
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Geocoder;
import android.location.Location;
import android.os.Bundle;
import android.os.Handler;
import android.os.ResultReceiver;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationCallback;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationResult;
import com.google.android.gms.location.LocationServices;
public class AddressListActivity extends AppCompatActivity {
private FusedLocationProviderClient fusedLocationClient;
private static final int LOCATION_PERMISSION_REQUEST_CODE = 2;
private LocationAddressResultReceiver addressResultReceiver;
private TextView currentAddTv;
private Location currentLocation;
private LocationCallback locationCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.current_location_address_layout);
Toolbar tb = findViewById(R.id.toolbar);
setSupportActionBar(tb);
tb.setSubtitle("Current Location Address");
addressResultReceiver = new LocationAddressResultReceiver(new Handler());
currentAddTv = findViewById(R.id.current_address);
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
currentLocation = locationResult.getLocations().get(0);
getAddress();
};
};
startLocationUpdates();
}
@SuppressWarnings("MissingPermission")
private void startLocationUpdates() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
LOCATION_PERMISSION_REQUEST_CODE);
} else {
LocationRequest locationRequest = new LocationRequest();
locationRequest.setInterval(2000);
locationRequest.setFastestInterval(1000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
fusedLocationClient.requestLocationUpdates(locationRequest,
locationCallback,
null);
}
}
@SuppressWarnings("MissingPermission")
private void getAddress() {
if (!Geocoder.isPresent()) {
Toast.makeText(AddressListActivity.this,
"Can't find current address, ",
Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent(this, GetAddressIntentService.class);
intent.putExtra("add_receiver", addressResultReceiver);
intent.putExtra("add_location", currentLocation);
startService(intent);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
switch (requestCode) {
case LOCATION_PERMISSION_REQUEST_CODE: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startLocationUpdates();
} else {
Toast.makeText(this, "Location permission not granted, " +
"restart the app if you want the feature",
Toast.LENGTH_SHORT).show();
}
return;
}
}
}
private class LocationAddressResultReceiver extends ResultReceiver {
LocationAddressResultReceiver(Handler handler) {
super(handler);
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
if (resultCode == 0) {
//Last Location can be null for various reasons
//for example the api is called first time
//so retry till location is set
//since intent service runs on background thread, it doesn't block main thread
Log.d("Address", "Location null retrying");
getAddress();
}
if (resultCode == 1) {
Toast.makeText(AddressListActivity.this,
"Address not found, " ,
Toast.LENGTH_SHORT).show();
}
String currentAdd = resultData.getString("address_result");
showResults(currentAdd);
}
}
private void showResults(String currentAdd){
currentAddTv.setText(currentAdd);
}
@Override
protected void onResume() {
super.onResume();
startLocationUpdates();
}
@Override
protected void onPause() {
super.onPause();
fusedLocationClient.removeLocationUpdates(locationCallback);
}
}
2.Your Intent Service as GetAddressIntentService
import android.app.IntentService;
import android.content.Intent;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.os.Bundle;
import android.os.ResultReceiver;
import android.support.annotation.Nullable;
import android.util.Log;
import java.util.List;
import java.util.Locale;
public class GetAddressIntentService extends IntentService {
private static final String IDENTIFIER = "GetAddressIntentService";
private ResultReceiver addressResultReceiver;
public GetAddressIntentService() {
super(IDENTIFIER);
}
//handle the address request
@Override
protected void onHandleIntent(@Nullable Intent intent) {
String msg = "";
//get result receiver from intent
addressResultReceiver = intent.getParcelableExtra("add_receiver");
if (addressResultReceiver == null) {
Log.e("GetAddressIntentService",
"No receiver, not processing the request further");
return;
}
Location location = intent.getParcelableExtra("add_location");
//send no location error to results receiver
if (location == null) {
msg = "No location, can't go further without location";
sendResultsToReceiver(0, msg);
return;
}
//call GeoCoder getFromLocation to get address
//returns list of addresses, take first one and send info to result receiver
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = null;
try {
addresses = geocoder.getFromLocation(
location.getLatitude(),
location.getLongitude(),
1);
} catch (Exception ioException) {
Log.e("", "Error in getting address for the location");
}
if (addresses == null || addresses.size() == 0) {
msg = "No address found for the location";
sendResultsToReceiver(1, msg);
} else {
Address address = addresses.get(0);
StringBuffer addressDetails = new StringBuffer();
addressDetails.append(address.getFeatureName());
addressDetails.append("\n");
addressDetails.append(address.getThoroughfare());
addressDetails.append("\n");
addressDetails.append("Locality: ");
addressDetails.append(address.getLocality());
addressDetails.append("\n");
addressDetails.append("County: ");
addressDetails.append(address.getSubAdminArea());
addressDetails.append("\n");
addressDetails.append("State: ");
addressDetails.append(address.getAdminArea());
addressDetails.append("\n");
addressDetails.append("Country: ");
addressDetails.append(address.getCountryName());
addressDetails.append("\n");
addressDetails.append("Postal Code: ");
addressDetails.append(address.getPostalCode());
addressDetails.append("\n");
sendResultsToReceiver(2,addressDetails.toString());
}
}
//to send results to receiver in the source activity
private void sendResultsToReceiver(int resultCode, String message) {
Bundle bundle = new Bundle();
bundle.putString("address_result", message);
addressResultReceiver.send(resultCode, bundle);
}
}
3.XML To display your Data
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AddressListActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:id="@+id/add_label"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:text="Current Location Address"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_marginTop="16dp"
android:id="@+id/current_address"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:lines="10"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/add_label"/>
</android.support.constraint.ConstraintLayout>
For more, check out this link.

Pang
- 9,564
- 146
- 81
- 122

Tapan Kumar Patro
- 767
- 1
- 7
- 18