它是如何工作的 – requestLocationUpdates()+ LocationRequest / Listener

我是新的Android编码器,并且在请求本地化更新时遇到问题。

我使用来自http://developer.android.com/training/location/receive-location-updates.html的教程。

我的应用程序可以处理exception,正确获取纬度和格式,地理编码器可以处理显示地址。 但是我只要求位置一次,或者位置改变。 我想要做时间间隔。 现在我开始从教程中实现代码,它看起来像这样:

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(); } 

所以已经有间隔实施和位置请求。 但在我给的链接之前有一个评论,我应该使用requestLocationUpdates() (可能onCreate()onStart()和删除onStop() )的请求,但我有问题。 所以,Eclipse给我展示了3种方法:

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

所以我认为第一个在这个地方是最正确的。 我应该在LocationListener插槽中放置什么? 我请求帮忙,解释一下它是如何工作的。

Solutions Collecting From Web of "它是如何工作的 – requestLocationUpdates()+ LocationRequest / Listener"

您在您的活动MainActivity中实现了LocationListener。 并发位置更新的呼叫将因此是这样的:

 mLocationClient.requestLocationUpdates(mLocationRequest, this); 

确保你正在实现的LocationListener是来自谷歌的API,这是导入:

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

而不是这个:

 import android.location.LocationListener; 

它应该工作得很好。

在您执行此操作之前,LocationClient确实已连接也很重要。 我build议你不要在onCreate或onStart方法中调用它,而是在onResume中调用它。 在Google Location Api的教程中,这一切都得到了很好的解释: https : //developer.android.com/training/location/index.html

我使用这个:

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

例如,使用1s间隔:

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

时间以毫秒为单位,距离以米为单位。

这会自动调用:

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

我也有这些包括在脚本中,但并没有真正使用它们:

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

简而言之:

 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); } }