微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 为什么FusedLocationApi.getLastLocation为null

我试图通过使用FusedLocationApi.getLastLocation来获取位置,并且我在清单文件中获得了位置权限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

但是,当我从系统请求位置时,我将变为null.我只是测试关闭和位置服务,所以它可能与此有关(当然,当我尝试这个时它是开启的).但即使在返回null之后,我也在等待onLocationChanged被调用,而且它永远不会被调用.我在这里也看到了类似的问题:FusedLocationApi.getLastLocation always null

这是我的代码

 protected LocationRequest createLocationRequest() {
    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(120000);
    mLocationRequest.setFastestInterval(30000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
    return mLocationRequest;
}

protected Googleapiclient getLocationapiclient(){
    return new Googleapiclient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
}

LocationRequest locationRequest = createLocationRequest(); 

@Override
public void onLocationChanged(Location location) {
    App.setLocation(location); // NEVER CALLED
}

@Override
public void onConnected(Bundle bundle) {
    App.setLocation(LocationServices.FusedLocationApi.getLastLocation(locationapiclient)); //RETURNS NULL
    LocationRequest locationRequest = createLocationRequest();
    LocationServices.FusedLocationApi.requestLocationUpdates(locationapiclient, locationRequest, this);
}

在onCreate我的应用程序:

locationapiclient = getLocationapiclient();
locationapiclient.connect();

这是我的应用程序对象.
为什么我得到null(是的,我知道它可能在文档中所述的极少数情况下为空,但我总是得到这个,而不是很少)并且之后仍然没有得到位置更新?这是一个没有SIM卡的真实设备(三星galaxy S3),如果有帮助的话.

解决方法:

我在我的应用程序中使用FusedLocationProvider 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();
    }

这是我的工作代码.

希望我的代码可以帮到你.

干杯..

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐