The Device Does fetch the location. The Problem is when I need to Access the Location, it DeviceLocation.class
keeps returning a null
value.
My DeviceLocation
class
public class DeviceLocation{
private static final String TAG = "DeviceLocation";
private FusedLocationProviderClient mFusedLocationProviderClient;
private static final int ERROR_DIALOG_REQUEST = 200;
private static Location mLocation;
private Context context;
public DeviceLocation(Context context) {
this.context = context;
}
private void updateDeviceLocation() {
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context);
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.INTERNET}, 123);
}
return;
}
mFusedLocationProviderClient.getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if(location != null){
mLocation = location;
Log.d(TAG, "Device Location is: " + mLocation.getLatitude() + ", " + mLocation.getLongitude()); //// ---> THIS WORKS
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "Error trying to get last Location");
}
});
}
public void getDeviceLocation(){
updateDeviceLocation();
Log.d(TAG, "getDeviceLocation() --> " + mLocation); // WHY DOES NOT THIS WORK!!! ---> WHY DOES THIS PRINT 'null'!!!!!!!!!!
}
}
In my MainActivity
I declared a new DeviceLocation
object, and initialized it in the onCreate()
Method. Then I call the getDeviceLocation()
method of DeviceLocatio
class.
MainActivity.class:
DeviceLocation deviceLoc;
onCreate() Method:
deviceLoc = new DeviceLocation(MainActivity.this);
deviceLoc.getDeviceLocation();