0

i try to get Last Known Location using function getLastKnownLocation() to get latitude and longitude to set it in textField but the instance of Location named location return null so it cant get latitude and longitude and set textField location not available how fixed it to get last known location ?!!

                public class ShowLocationActivity extends Activity implements LocationListener {
                private TextView latituteField;
                private TextView longitudeField;
                private LocationManager locationManager;
                private String provider;

                /** Called when the activity is first created. */
                @Override
                public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_show_location);
                    latituteField = (TextView) findViewById(R.id.TextView02);
                    longitudeField = (TextView) findViewById(R.id.TextView04);

                    // Get the location manager
                    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                    // Define the criteria how to select the locatioin provider -> use
                    // default
                    Criteria criteria = new Criteria();
                    provider = locationManager.getBestProvider(criteria, false);
                    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION)
                            == PackageManager.PERMISSION_GRANTED)
                    {
                        Location location = locationManager.getLastKnownLocation(provider);

                        // Initialize the location fields
                        if (location != null) {
                            System.out.println("Provider4 " + provider + " has been selected.");
                            onLocationChanged(location);
                        } else {
                            latituteField.setText("Location not available");
                            longitudeField.setText("Location not available");
                        }
                    }
                }

                /* Request updates at startup */
                @Override
                protected void onResume() {
                    super.onResume();
                    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
                            == PackageManager.PERMISSION_GRANTED)
                    locationManager.requestLocationUpdates(provider, 400, 1, this);
                }

                /* Remove the locationlistener updates when Activity is paused */
                @Override
                protected void onPause() {
                    super.onPause();
                    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
                            == PackageManager.PERMISSION_GRANTED)
                    locationManager.removeUpdates(this);
                }

                @Override
                public void onLocationChanged(Location location) {
                    int lat = (int) (location.getLatitude());
                    int lng = (int) (location.getLongitude());
                    latituteField.setText(String.valueOf(lat));
                    longitudeField.setText(String.valueOf(lng));
                }

                @Override
                public void onStatusChanged(String provider, int status, Bundle extras) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onProviderEnabled(String provider) {
                    Toast.makeText(this, "Enabled new provider " + provider,
                            Toast.LENGTH_SHORT).show();

                }

                @Override
                public void onProviderDisabled(String provider) {
                    Toast.makeText(this, "Disabled provider " + provider,
                            Toast.LENGTH_SHORT).show();
                }
            }

}

Rana Tarek
  • 39
  • 7

1 Answers1

0

use this code snipet to get Last known location:

add dependency :

implementation 'com.google.android.gms:play-services-location:11.4.0'

and Add permission:

  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

then:

 @SuppressWarnings("MissingPermission")
    private void getLastLocation() {
     FusedLocationProviderClient   mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

        mFusedLocationClient.getLastLocation()
                .addOnCompleteListener(new OnCompleteListener<Location>() {
                    @Override
                    public void onComplete(@NonNull Task<Location> task) {
                        if (task.isSuccessful() && task.getResult() != null) {
                            mLastLocation = task.getResult();
                            double lat = mLastLocation.getLatitude();
                            double log = mLastLocation.getLongitude();
                            Log.d(TAG, "lat:"+lat+"::"+log);

                        } else {
                            Timber.w("getLastLocation:exception::" + task.getException());

                        }
                    }
                });
    }

for more details goto Getting the Last Known Location

Vinay
  • 732
  • 5
  • 8
  • i have error in FusedLocationProviderClient "cannot resolve FusedLocationProviderClient " although i add the permission compile 'com.google.android.gms:play-services:9.2.0' compile 'com.google.android.gms:play-services-location:9.2.0' what the problem ? – Rana Tarek Oct 12 '17 at 16:33
  • update your dependency .check updated code – Vinay Oct 12 '17 at 16:46