Reputation: 612
I don't know whats wrong is with emulator. I can't take locatioan with this command
LocationServices.FusedLocationApi.getLastLocation(googleApiClient)
In my emulator supported the gps and google play service but nothing works for taking the current locaion. The location = null. Need help. Here my code :
private void configureGoogleApiClient() {
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(Constant.INTERVAL);
locationRequest.setFastestInterval(Constant.FASTINTERVAL);
googleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
if (googleApiClient != null) {
googleApiClient.connect();
}
}
@Override
protected void onStart() {
super.onStart();
if (googleApiClient != null) {
googleApiClient.connect();
}
}
protected void onStop() {
// Disconnecting the client invalidates it.
if (googleApiClient != null) {
googleApiClient.disconnect();
}
super.onStop();
}
@Override
protected void onPause() {
super.onPause();
if (googleApiClient != null) {
googleApiClient.disconnect();
}
}
@Override
protected void onResume() {
super.onResume();
if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
if (googleApiClient != null)
googleApiClient.connect();
}
}
@Override
public void onConnected(@Nullable Bundle bundle) {
if (googleApiClient.isConnected()) {
Log.e(MainActivity.class.getSimpleName(), "Is connected");
} else
Log.e(MainActivity.class.getSimpleName(), "Is not connected");
if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Log.e(MainActivity.class.getSimpleName(), "Is connected on GPS");
} else {
Log.e(MainActivity.class.getSimpleName(), "Is not connected on GPS");
}
Utility.checkPermission(this);
location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
if (location == null) {
Utility.checkPermission(this);
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
}
if (location != null) {
latText.setText("Lat: " + String.valueOf(location.getLatitude()));
longText.setText("Long: " + String.valueOf(location.getLongitude()));
} else {
latText.setText(getString(R.string.error_find_location));
longText.setText(getString(R.string.error_find_location));
}
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.e(MainActivity.class.getSimpleName(), connectionResult.toString());
}
@Override
public void onLocationChanged(Location location) {
currentLocation = location;
if (googleApiClient != null)
if (googleApiClient.isConnected() || googleApiClient.isConnecting()) {
googleApiClient.disconnect();
googleApiClient.connect();
} else if (!googleApiClient.isConnected()) {
googleApiClient.connect();
}
String msg = "Updated Location: " + Double.toString(location.getLatitude()) + "," + Double.toString(location.getLongitude());
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
configureView();
}
Upvotes: 2
Views: 464
Reputation: 1514
My guess is that the last location only shows the last location. It doesn't actually try to figure out the location. On your phone another app probably requested the location. So, there is a last location.
I've added this code to request a location if there is none.
Location userLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
if (userLocation == null) {
LocationRequest locationRequest = new LocationRequest();
locationRequest.setNumUpdates(1);
locationRequest.setInterval(0);
locationRequest.setPriority(PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(
googleApiClient, locationRequest,
new LocationListener() {
@Override
public void onLocationChanged(Location location) {
LocationServices.FusedLocationApi.removeLocationUpdates(
googleApiClient,
this);
}
});
Upvotes: 3