Java – locationclient getlastlocation() returns null
I'm new to Android programming and want to start by creating a very basic application that displays the latitude and longitude of the current location on the screen
I'm developing and reading my Samsung Galaxy S3. You need to kickstart the phone to return the GPS
I have tried to call the requestlocationupdates() method on locationmanager in the onconnected() method But I found that locationclient still returned an empty location
Who can tell me what I did wrong?
This 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,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 list 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 run the debugger, I find that mlocationclient Mcurrentlocation after getlastlocation() is null
I would appreciate any help!
Solution
mLocationClient. getLastLocation(); If you do not have any last location saved by the device, null may be returned If you read its documentation, it says;
It returns the latest location currently available If a location is unavailable, which rarely happens, null is returned
Also in the onlocationchanged method, when your location changes, you may want to set the location to the latest location
@Override public void onLocationChanged(final Location location) { mCurrentLocation = location; }