0

所以,我有一个在后台被调用的 JobService。但是我需要它来获取当前位置并将其发送到网络服务。当我发送静态数据时,Web 服务运行良好。然而,获得位置是一个问题。位置对象始终为空。这是我一直在尝试的。

public class GPSBackgroundJobService extends JobService implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

private String LOGSERVICE = "GPS";

private InspectorsLogic mInspectorsLogic;
ParsoContext mContext;

private GoogleApiClient mGoogleApiClient;

ParsoLocationListener mLocationListener;
Location mLastLocation;
Double longitude;
Double latitude;



@Override
public void onCreate() {
    super.onCreate();
    Log.i(LOGSERVICE, "onCreate");
    mContext = (ParsoContext) getApplicationContext();
    mInspectorsLogic = new InspectorsLogic(mContext);


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





@Override
public boolean onStartJob(JobParameters job) {
    Log.i(LOGSERVICE, "onStartJob called");
    mGoogleApiClient.connect();
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

    if (mLastLocation!=null) {
        latitude = mLastLocation.getLatitude();
        longitude =mLastLocation.getLongitude();
        sendGPSTask mSendGPSTask = new sendGPSTask();
        mSendGPSTask.execute(Double.toString(latitude), Double.toString(longitude));
    }else{
        Log.e(LOGSERVICE, "Lat and Long are null");
    }
    return false;
}

@Override
public boolean onStopJob(JobParameters job) {
    mGoogleApiClient.disconnect();
    return false;
}

@Override
public void onConnected(Bundle connectionHint) {
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}


}
4

2 回答 2

0

如果 getLastLocation 还没有位置修复,则返回 null - 这意味着除非您在其他地方使用 GPS,否则它几乎总是返回 null。为确保您获得位置,请使用 getLocationUpdates 并等待位置修复(这不会是即时的,取决于大气条件、您是在室内还是室外等,这可能需要几秒钟到一分钟左右的时间 - 或只是永远不会发生)。

于 2017-02-21T22:22:52.470 回答
0

显然代码很好,为了使它工作,这就是我所做的:

  1. 检查应用程序的权限(需要激活的位置)
  2. 将您的 GPS 设置更改为(移动数据和 wifi 之一)

使用问题上发布的当前代码进行此操作,成功了。

于 2017-02-22T16:10:25.260 回答