Problems in this code:
- Latitude & Longitude Values always 0.0
- City Name is also empty in second activity (MenuActivity).
- Work correctly only when i access these values in MainActivity (WelcomeActivity) & don't use the 2nd MenuActivity.
WelcomeActivity.class
package com.example.safi.locations;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.LocationSettingsRequest;
import com.google.android.gms.location.LocationSettingsResult;
import com.google.android.gms.location.LocationSettingsStates;
import com.google.android.gms.location.LocationSettingsStatusCodes;
import java.io.IOException;
import java.util.List;
import java.util.Locale;    
public class WelcomeActivity extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
    private Button buttons;
    private static final String TAG = "WelcomeActivity";
    private GoogleApiClient mGoogleApiClient;
    private Location mLastLocation;
    public  double latitudePosition;
    public  double longitudePosition;
    public  String currentCity;
    private final int REQUEST_LOCATION = 200;
    private final int REQUEST_CHECK_SETTINGS = 300;
    private LocationRequest mLocationRequest;
    private PendingResult<LocationSettingsResult> result;
    private LocationSettingsRequest.Builder builder;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        if (mGoogleApiClient == null) {
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build();
        }
        buttons = (Button) findViewById(R.id.button);
        buttons.setOnClickListener(this);
    }    
    @Override
    protected void onStart() {
        mGoogleApiClient.connect();
        super.onStart();
    }
    @Override
    protected void onStop() {
        mGoogleApiClient.disconnect();
        super.onStop();
    }
    @Override
    public void onConnected(Bundle bundle) {
        mLocationRequest = createLocationRequest();
        builder = new LocationSettingsRequest.Builder().addLocationRequest(mLocationRequest);
        result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
        result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
            @Override
            public void onResult(LocationSettingsResult result) {
                final Status status = result.getStatus();
                final LocationSettingsStates mState = result.getLocationSettingsStates();
                switch (status.getStatusCode()) {
                    case LocationSettingsStatusCodes.SUCCESS:
                        if (ActivityCompat.checkSelfPermission(WelcomeActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(WelcomeActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                            ActivityCompat.requestPermissions(WelcomeActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
                        } else {
                            mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
                            if (mLastLocation != null) {    
                                latitudePosition = mLastLocation.getLatitude();
                                setLatitudePosition(latitudePosition);
                                longitudePosition = mLastLocation.getLongitude();
                                setLongitudePosition(longitudePosition);    
                                getAddressFromLocation(mLastLocation, getApplicationContext(), new GeoCoderHandler());
                            }    
                        }
                        break;
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                        try {    
                            status.startResolutionForResult(WelcomeActivity.this, REQUEST_CHECK_SETTINGS);
                        } catch (IntentSender.SendIntentException e) {    
                        }
                        break;
                    case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                        break;
                }
            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {    
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {    
    }
    @Override
    public void onConnectionSuspended(int i) {
    }
    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
    }
    @Override
    public void onLocationChanged(Location location) {
        if(mLastLocation != null) {
            latitudePosition = mLastLocation.getLatitude();
            setLatitudePosition(latitudePosition);
            longitudePosition = mLastLocation.getLongitude();
            setLongitudePosition(longitudePosition);    
            getAddressFromLocation(mLastLocation, getApplicationContext(), new GeoCoderHandler());    
        }
    }
    public static void getAddressFromLocation(final Location location, final Context context, final Handler handler) {
        Thread thread = new Thread() {
            @Override
            public void run() {
                Geocoder geocoder = new Geocoder(context, Locale.getDefault());
                String result = null;
                try {
                    List<Address> list = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
                    if (list != null && list.size() > 0) {
                        Address address = list.get(0);
                        result = address.getLocality();
                    }
                } catch (IOException e) {
                    Log.e(TAG, "Impossible to connect to Geocoder", e);
                }
                finally {
                    Message msg = Message.obtain();
                    msg.setTarget(handler);
                    if (result != null) {
                        msg.what = 1;
                        Bundle bundle = new Bundle();
                        bundle.putString("address", result);
                        msg.setData(bundle);
                    } else
                        msg.what = 0;
                    msg.sendToTarget();
                }
            }    
        };
        thread.start();
    }
    private class GeoCoderHandler extends Handler {
        @Override
        public void handleMessage(Message message) {
            String result;
            switch (message.what) {
                case 1:
                    Bundle bundle = message.getData();
                    result = bundle.getString("address");
                    break;
                default:
                    result = null;
            }
            currentCity = result;
            setCurrentCity(currentCity);
        }
    }
    public double getLatitudePosition(){
        return latitudePosition;
    }
    public double getLongitudePosition(){
        return longitudePosition;
    }
    final public String getCurrentCity(){
        return currentCity;
    }
    public void setLatitudePosition(double latitudePosition){
        this.latitudePosition = latitudePosition;
    }
    public void setLongitudePosition(double longitudePosition){
        this.longitudePosition = longitudePosition;
    }
    public void setCurrentCity(String currentCity){
        this.currentCity = currentCity;
    }
    protected LocationRequest createLocationRequest() {
        LocationRequest mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(10000);
        mLocationRequest.setFastestInterval(5000);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        return mLocationRequest;
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
                startActivity(intent);
                setContentView(R.layout.activity_menu);
        }
    }
}
MenuActivity.class
package com.example.safi.locations;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;    
public class MenuActivity extends AppCompatActivity {    
    private TextView longi;
    private TextView lati;
    private TextView citi;
    public String latiudeString;
    public String longitudeString;
    public String cityString;    
    WelcomeActivity ob = new WelcomeActivity();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
        longitudeString = Double.toString(ob.getLongitudePosition());
        latiudeString = Double.toString(ob.getLatitudePosition());
        cityString = ob.getCurrentCity();    
            longi = (TextView) findViewById(R.id.lon);
            longi.setText(longitudeString);
            lati = (TextView) findViewById(R.id.lat);
            lati.setText(latiudeString);
            citi = (TextView) findViewById(R.id.city1);
            citi.setText(cityString);     
    }   
}
 
     
    