【问题标题】:Android LocationServices lastKnownPositionAndroid LocationServices lastKnownPosition
【发布时间】:2015-05-07 07:36:33
【问题描述】:

我环顾四周,但找不到解决方案。我试图在 Android 中找到最后一个已知位置,我从谷歌开发人员那里看到了这个,但函数 onConnected() 从未被调用过。另外,如果我把它放在onCreate() 中,Android 的地理定位图标永远不会打开。

该应用使用已使用 FusedLocation 的权限和谷歌服务。

//class implements ConnectionCallbacks, OnConnectionFailedListener
protected void onCreate(Bundle savedInstanceState) {
    [...]
    buildGoogleApiClient();
}

@Override
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

protected synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
}

@Override
public void onConnected(Bundle connectionHint) {
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);
    if (mLastLocation != null) {
        String lat = String.valueOf(mLastLocation.getLatitude()); //it's only for test
        String lng = String.valueOf(mLastLocation.getLongitude());
    }
}

编辑:没关系,休息一天后,该功能运行正常。代码是一样的。我要删除这个问题吗?

【问题讨论】:

    标签: android google-play-services android-location google-api-client


    【解决方案1】:

    您应该使用 FusedLocationProvide api,它在您构建时提供更准确的位置更新。下面是代码 -

    @Override
    protected void onCreate(Bundle savedInstanceState){
      //put your code here
      ....
      getLocation();
    }
    
    private void getLocation(){
       locationRequest = LocationRequest.create();
       locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
       locationRequest.setInterval(LOCATION_INTERVAL);
       locationRequest.setFastestInterval(LOCATION_INTERVAL);
       fusedLocationProviderApi = LocationServices.FusedLocationApi;
       googleApiClient = new GoogleApiClient.Builder(this)
       .addApi(LocationServices.API)
       .addConnectionCallbacks(this)
       .addOnConnectionFailedListener(this)
       .build();
       if (googleApiClient != null) {
          googleApiClient.connect();
       }
    }  
    
    
     @Override
     public void onConnected(Bundle arg0) {
         fusedLocationProviderApi.requestLocationUpdates(googleApiClient,   locationRequest, this);
      }
    
     @Override
     public void onLocationChanged(Location location) {
          Toast.makeText(mContext, "location :"+location.getLatitude()+" , "+location.getLongitude(), Toast.LENGTH_SHORT).show();
      }
    

    它一定会起作用的。让我们试试吧。

    【讨论】:

      猜你喜欢
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 2015-01-06
      • 2017-08-10
      • 2014-09-22
      • 1970-01-01
      相关资源
      最近更新 更多