有效使用Android位置更新

时间:2015-02-27 11:36:56

标签: android location

我刚刚开始使用android提供的位置服务,我正在考虑以下代码:

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      //update textview
      makeUseOfNewLocation(location);
    }

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

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
  };

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

当位置更新时,我将使用可用的getSpeed()方法以速度更新文本视图。

我的问题是,这会破坏手机的电池续航时间吗?如果是的话,有没有更有效的方法呢?比如注册BroadcastReceiver以获取位置更新?我只是在寻找能够以最大化电池寿命的方式使用位置更新的方法。

1 个答案:

答案 0 :(得分:3)

  

Google Play服务位置API优于Android   框架位置API(android.location)作为添加位置的一种方式   了解您的应用。如果您目前正在使用Android   框架位置API,强烈建议您切换到   Google Play尽快提供服务位置API。

来源:Making Your App Location-Aware

我已经使用过它,并发现以下内容非常有效,特别是在核电池方面经常准确地获取位置:

1。使用Fused Location ProviderGoogleApiClient

   mGoogleApiClient = new GoogleApiClient.Builder(this)
           .addConnectionCallbacks(this)
           .addOnConnectionFailedListener(this)
           .addApi(LocationServices.API)
           .build();
           mGoogleApiClient.connect();  

2. 根据要求使用LocationRequest

mLocationRequest = new LocationRequest();    
mLocationRequest.setFastestInterval(120000);
    //there are other options associated with this objects
    // including types of priority
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

3. 如果类实现this或在以下位置定义新位置,则将LocationServices设置为使用LocationListener

LocationServices.FusedLocationApi.requestLocationUpdates(
                     mGoogleApiClient, mLocationRequest, this);

所有组件都在包

com.google.android.gms  

gms/location/package-summary

参考:googlesamples/android-play-location