2013-03-05 68 views
2

我一直在寻找围绕如何实现的方式在Android中获得用户的位置,我碰到这太问题就来了: What is the simplest and most robust way to get the user's current location on Android?LocationResult中发生了什么?

我的问题是,什么是LocationResult?我将如何使用它?我在那个问题上构建了一个类似的应用程序,我根据当前位置搜索附近的地方。我正在考虑有一个类似于轮询位置更改的单独类,所以我不必在不同的活动中重复该代码。我怀疑LocationResult是为了这个目的?你能告诉我一个如何在OnCreate()方法中使用它的例子吗?

+0

这个问题和它的答案是将近三十岁,在这一点上。在Android年代,这是一个次要的永恒。您可以考虑阅读文档以获取更新的指导:http://developer.android.com/guide/topics/location/strategies.html – CommonsWare 2013-03-05 01:35:31

+0

您是否发现了某些内容? – Castiblanco 2013-09-10 18:21:14

回答

0

Johnathan,

LocationResult是一种检索要处理的数据的简单方法。这是一个抽象类,您可以在其中实现子类以使用数据。见abstract class concept

0

这是代码,您需要:

protected LocationCallback mLocationCallback = new LocationCallback() 
{ 
    @Override 
    public void onLocationAvailability(LocationAvailability locationAvailability) { 
     super.onLocationAvailability(locationAvailability); 
     if(!locationAvailability.isLocationAvailable()) 
     {// No location available 
      checkLocationSettings(); 
      Snackbar snackLocationUnavailable = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.location_unavailable, Snackbar.LENGTH_LONG); 
      snackLocationUnavailable.show(); 
     } 
     else 
     { 
      Snackbar snackLocationAvailable = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.location_available, Snackbar.LENGTH_LONG); 
      snackLocationAvailable.show(); 
     } 
} 

    @Override 
    public void onLocationResult(LocationResult locationResult) { 
     super.onLocationResult(locationResult); 
     mLastLocation = locationResult.getLastLocation(); 
     mMyLatLng = new LatLng(valueOf(mLastLocation.getLatitude()), valueOf(mLastLocation.getLongitude())); 
     meMarker.setPosition(mMyLatLng); 
     mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(mMyLatLng, 15)); 
     Snackbar snak2 = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.location_updated, Snackbar.LENGTH_INDEFINITE); 
     snak2.show(); 
    } 
}; 

...

onCreate(){ 
// Build GoogleApiClient 
    if (mGoogleApiClient == null) { 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 

//`Build LocationRequest 
     mLocationRequest = LocationRequest.create() 
       .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) 
       .setInterval(2000)  // 2 seconds, in milliseconds 
       .setFastestInterval(1000); // 1 second, in milliseconds 
` 
//  

Build LocationSettingsRequest 
     LocationSettingsRequest.Builder lRbuilder = new LocationSettingsRequest.Builder(); 
     lRbuilder.addLocationRequest(mLocationRequest); 
     mLocationSettingsRequest = lRbuilder.build(); 
     lRbuilder.setAlwaysShow(true); 

// ... 

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, mLocationCallback, null); 

//... 

LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, mLocationCallback);