LocationClient getLastLocation () returns null

I am new to Android programming and wanted to start by creating a very simple application that displays the latitude and longitude of the current location on the screen.

I am developing for my Samsung Galaxy S3 and reading that you need to start the computer in order to get the GPS back .

I tried to do this in the onConnected() method with a call to the requestLocationUpdates() method in the LocationManager. However, I found that LocationClient is still returning a null location.

Can someone tell me what I am doing wrong?

Here is my MainActivity:

 import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.Menu; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesClient; import com.google.android.gms.location.LocationClient; public class MainActivity extends FragmentActivity implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener { private LocationClient mLocationClient; private Location mCurrentLocation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLocationClient = new LocationClient(this, this, this); } @Override protected void onStart() { super.onStart(); mLocationClient.connect(); } @Override protected void onStop() { mLocationClient.disconnect(); super.onStop(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onConnectionFailed(ConnectionResult arg0) { // TODO Auto-generated method stub } @Override public void onConnected(Bundle arg0) { Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show(); LocationManager manager = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } @Override public void onLocationChanged(final Location location) { } }); mCurrentLocation = mLocationClient.getLastLocation(); TextView latTextView = (TextView) findViewById(R.id.latitude_text); latTextView.setText(Double.toString(mCurrentLocation.getLatitude())); TextView longTextView = (TextView) findViewById(R.id.longitude_text); longTextView.setText(Double.toString(mCurrentLocation.getLongitude())); } @Override public void onDisconnected() { Toast.makeText(this, "Disconnected. Please re-connect.", Toast.LENGTH_SHORT).show(); } } 

My Android manifest looks like this:

  <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.willigetwet.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

When I start the debugger, I find that mCurrentLocation is null after calling mLocationClient.getLastLocation() .

I would be very grateful for any help!

+6
source share
1 answer

mLocationClient.getLastLocation(); can return null if you don’t have the last place saved by the device. If you read his documentation , he says:

It returns the best most recent location currently available. If a location is not available, which should happen very rarely, null will be returned

Also inside the onLocationChanged method onLocationChanged you can set the location to the last place when your location is changed.

 @Override public void onLocationChanged(final Location location) { mCurrentLocation = location; } 
+8
source

Source: https://habr.com/ru/post/950414/


All Articles