這是完全相同的工作方案,probaly輕微的不同情況。但我想添加一些小解釋步驟,以便任何人都能得到確切的概念。我沒有看到您在代碼中使用的LocationEngine。我在這裏使用LocationServices.FusedLocationApi作爲我LocationEngine。 。不IntentService),構建然後如下連接的GoogleApiClient:
buildGoogleApiClient();
mGoogleApiClient.connect();
其中,buildGoogleApiClient()實現,
protected synchronized void buildGoogleApiClient() {
Log.i(TAG, "Building GoogleApiClient");
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
上的onDestroy()之後,您可以斷開GoogleApiClient爲,
@Override
public void onDestroy() {
Log.i(TAG, "Service destroyed!");
mGoogleApiClient.disconnect();
super.onDestroy();
}
步驟1確保您構建和連接GoogleApiClient。
1)GoogleApiClient實例第一次通過onConnected()方法獲取連接。現在,你的下一步應該看onConnected()方法。
@Override
public void onConnected(@Nullable Bundle bundle) {
Log.i(TAG, "GoogleApiClient connected!");
buildLocationSettingsRequest();
createLocationRequest();
location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
Log.i(TAG, " Location: " + location); //may return **null** because, I can't guarantee location has been changed immmediately
}
上面,你叫的方法createLocationRequest()創建位置請求。該方法createLocationRequest()看起來像的下方。
protected void createLocationRequest() {
//remove location updates so that it resets
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); //Import should not be **android.Location.LocationListener**
//import should be **import com.google.android.gms.location.LocationListener**;
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(10000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
//restart location updates with the new interval
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}
3)現在,LocationListener的界面上onLocationChange()回調,你會得到新的位置。
@Override
public void onLocationChanged(Location location) {
Log.i(TAG, "Location Changed!");
Log.i(TAG, " Location: " + location); //I guarantee,I get the changed location here
}
你得到的結果像這樣的logcat: 03-22 18:34:17.336 817-817/com.LiveEarthquakesAlerts I/LocationTracker:位置:位置[融合37.421998,-122.084000 ACC = 20 et = + 15m35s840ms alt = 0.0]
爲了能夠完成這三個步驟,您應該已經配置了您的構建。gradle,如下所示:
compile 'com.google.android.gms:play-services-location:10.2.1'
謝謝,我會將其作爲回退位置,但Mapbox API(這是我使用的)似乎更簡單,所以如果我可以得到那個工作,我想。不過,這對於Google API來說是一個很好的答案。 – nasch
我在這裏提供的代碼片段是我用於Google Play商店中的某個應用的確切代碼。這是100%的工作代碼。這個想法是一樣的。 https://play.google.com/store/apps/details?id=com.LiveEarthquakesAlerts –
我沒有說它不起作用,它只是使用與我正在使用的API不同的API。 – nasch