You can use the new location provider (FusedLocationProvider), which combines information from different location providers, so if your device is able to get a place, you will find out about it. Of course, you must enable in the settings for your device the ability to use location information by applications.
Check developers.android.com for more information about this provider.
This solution works fine for me:
public class FusedLocationListener implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener { public interface LocationListener { public void onReceiveLocation(Location location); } private LocationListener mListener; public static final String TAG = "Fused"; private LocationClient locationClient; private LocationRequest locationRequest; protected int minDistanceToUpdate = 1000; protected int minTimeToUpdate = 10*1000; protected Context mContext; @Override public void onConnected(Bundle bundle) { Log.d(TAG, "Connected"); locationRequest = new LocationRequest(); locationRequest.setSmallestDisplacement(1); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setInterval(30000); locationRequest.setNumUpdates(1); locationClient.requestLocationUpdates(locationRequest, this); } @Override public void onDisconnected() { Log.d(TAG, "Disconnected"); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.d(TAG, "Failed"); } private static FusedLocationListener instance; public static synchronized FusedLocationListener getInstance(Context context, LocationListener listener){ if (null==instance) { instance = new FusedLocationListener(context, listener); } return instance; } private FusedLocationListener(Context context, LocationListener listener){ mContext = context; mListener = listener; } public void start(){ Log.d(TAG, "Listener started"); locationClient = new LocationClient(mContext,this,this); locationClient.connect(); } @Override public void onLocationChanged(Location location) { Log.d(TAG, "Location received: " + location.getLatitude() + ";" + location.getLongitude());
Using:
public class MyActivity extends Activity implements FusedLocationListener.LocationListener { @Override public void onCreate(Bundle savedInstanceState) { FusedLocationListener locationListener FusedLocationListener.getInstance(getApplicationContext(), this); locationListener.start(); } @Override public void onReceiveLocation(Location location) {
Rodion Altshuler Jul 31 '13 at 10:09 2013-07-31 10:09
source share