Search code examples
androidlocationlocationmanager

Can not get my current location


I have tried to display the Longitude and Latitude of my current location but I could not.

package com.example.laptop.findlonglat;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

static final int REQUEST_LOCATION = 1;
LocationManager locationManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    getLocation();
}

void getLocation() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);

    } else {
        Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

        if (location != null) {
            double latti = location.getLatitude();
            double longi = location.getLongitude();

            ((EditText) findViewById(R.id.etLocationLat)).setText("Latitude: " + latti);
            ((EditText) findViewById(R.id.etLocationLong)).setText("Longitude: " + longi);
        } else {
            ((EditText) findViewById(R.id.etLocationLat)).setText("Unable to find correct location.");
            ((EditText) findViewById(R.id.etLocationLong)).setText("Unable to find correct location. ");
        }
    }

}


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode) {
        case REQUEST_LOCATION:
            getLocation();
            break;
    }
}
      }

In this example I am trying to display the longitude and latitude of my current location in the textfields but when I am running this code I got the output says that "Unable to find correct location".

I have added this to the Manifest.xml

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

Is there any solution to fix this issue


Solution

  • Easiest way to get the user last location is using FusedLocation provider. below i have added code snippet about how to use it:

    private FusedLocationProviderClient mFusedLocationClient;
    
    // ..
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    // ...
    
       mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
    }
    

    then whenever you need your current location :

    mFusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location. In some rare situations this can be null.
                if (location != null) {
                    // Logic to handle location object
                }
            }
    });