How does it work - requestLocationUpdates() + LocationRequest/Listener

匿名 (未验证) 提交于 2019-12-03 02:23:02

问题:

I am new Android coder and I have problem with requesting updates for my localization.

I working with tutorials from http://developer.android.com/training/location/receive-location-updates.html .

My application can handle exceptions, getting latitude and longitute properly, and geocoder can handle displaying the adress. But I ask for location only once - or when location changes. I would like to do time intervals. For now I started implementing code from the tutorials and it looks like that:

public class MainActivity extends Activity implements  GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener, LocationListener {  private static final int MILLISECONDS_PER_SECOND = 1000;  public static final int UPDATE_INTERVAL_IN_SECONDS = 5; private static final long UPDATE_INTERVAL =           MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS;  private static final int FASTEST_INTERVAL_IN_SECONDS = 1; private static final long FASTEST_INTERVAL =           MILLISECONDS_PER_SECOND * FASTEST_INTERVAL_IN_SECONDS;  private TextView tvStatus; private TextView tvLatitude; private TextView tvLongitude;  LocationRequest mLocationRequest; LocationClient mLocationClient; Location mCurrentLocation;  boolean bNetworkEnabled; boolean bGPSEnabled;  @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);      setContentView(R.layout.activity_main);     tvStatus = (TextView)findViewById(R.id.tvStatus);     tvLatitude = (TextView)findViewById(R.id.tvLatitude);     tvLongitude = (TextView)findViewById(R.id.tvLongitude);      mLocationRequest = LocationRequest.create();     mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);     mLocationRequest.setInterval(UPDATE_INTERVAL);     mLocationRequest.setFastestInterval(FASTEST_INTERVAL);     mLocationClient = new LocationClient(this, this, this);      checkProviders(); } 

So there are already intervals implemented and location request. But in the link I gave before there is a comment that I should use somewhere requestLocationUpdates() (probably onCreate(), onStart() and removal of request on onStop()), but I have problem with it. So, Eclipse shows me 3 methods:

requestLocationUpdates(LocationRequest request, LocationListener listener) requestLocationUpdates(LocationRequest request, PendingIntent CallbackIntent) requestLocationUpdates(LocationRequest request, LocationListener listener, Looper looper) 

So the first one I think is most right in this place. What should I place in LocationListener slot? I ask for help with little explanation how it works.

回答1:

You are implementing LocationListener in your activity MainActivity. The call for concurrent location updates will therefor be like this:

mLocationClient.requestLocationUpdates(mLocationRequest, this); 

Be sure that the LocationListener you're implementing is from the google api, that is import this:

import com.google.android.gms.location.LocationListener; 

and not this:

import android.location.LocationListener; 

and it should work just fine.

It's also important that the LocationClient really is connected before you do this. I suggest you don't call it in the onCreate or onStart methods, but in onResume. It is all explained quite well in the tutorial for Google Location Api: https://developer.android.com/training/location/index.html



回答2:

I use this one:

LocationManager.requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) 

For example, using a 1s interval:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,this); 

the time is in milliseconds, the distance is in meters.

This automatically calls:

public void onLocationChanged(Location location) {     //Code here, location.getAccuracy(), location.getLongitude() etc... } 

I also had these included in the script but didnt actually use them:

public void onStatusChanged(String provider, int status, Bundle extras) {} public void onProviderEnabled(String provider) {} public void onProviderDisabled(String provider) {} 

In short:

public class GPSClass implements LocationListener {      public void onLocationChanged(Location location) {         // Called when a new location is found by the network location provider.         Log.i("Message: ","Location changed, " + location.getAccuracy() + " , " + location.getLatitude()+ "," + location.getLongitude());     }      public void onStatusChanged(String provider, int status, Bundle extras) {}     public void onProviderEnabled(String provider) {}     public void onProviderDisabled(String provider) {}      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);         locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,this);     } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!