我正在尝试从背景中获取位置Service
。问题是onResult()
内部的函数Awareness.SnapshotApi.getLocation(mGoogleApiClient).setResultCallback(new ResultCallback<LocationResult>()
没有被调用。这里有什么问题?
这些函数onConnected()
也onConnectionSuspended()
没有被调用,但是当我打印出来时mGoogleApiClient.isConnected() = true
返回。
所以我试图理解为什么onConnected()
也没有被调用。
public class BlockingService extends Service implements GoogleApiClient.ConnectionCallbacks {
private GoogleApiClient mGoogleApiClient;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
initAwarenessAPI();
amIClosetoLocation(<LatLng I get from my database>);
return START_NOT_STICKY;
}
@Override
public void onDestroy() {
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
super.onDestroy();
}
private void initAwarenessAPI() {
Context context = getApplicationContext();
mGoogleApiClient = new GoogleApiClient.Builder(context)
.addApi(Awareness.API)
.build();
mGoogleApiClient.connect();
}
private Boolean amIClosetoLocation(final LatLng savedLoc) {
final String TAG = "Awareness";
mLog.printToLog(className + Constants.funcStart + MethodName.methodName() + ": Entered Function");
amIClosetoLocation = false;
if (ContextCompat.checkSelfPermission(
getApplicationContext(),
android.Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
mLog.printToLog(className + MethodName.methodName() + ": ***DONT HAVE LOCATION PERMISSION***");
} else {
mLog.printToLog(className + MethodName.methodName()
+ ": Permission Exists -- so now going to get location");
Awareness.SnapshotApi.getLocation(mGoogleApiClient)
.setResultCallback(new ResultCallback<LocationResult>() {
@Override
public void onResult(@NonNull LocationResult locationResult) {
//THIS FUNCTION IS NOT GETTING CALLED
if (!locationResult.getStatus().isSuccess()) {
Log.e(TAG, "Could not get location.");
mLog.printToLog(className + MethodName.methodName() + ": Could NOT get location");
return false;
} else {
mLog.printToLog(className + MethodName.methodName()
+ ": Success: Able to send location");
}
Location currLocation = locationResult.getLocation();
mLog.printToLog(className + MethodName.methodName()
+ ": Success, Received location = " + currLocation.toString());
mLog.printToLog(className + Constants.funcStart + MethodName.methodName() +
": Got Location = Lat: " +
currLocation.getLatitude() +
", Lon: " + currLocation.getLongitude());
}
});
}
mLog.printToLog(className + Constants.funcEnd + MethodName.methodName()
+ ": Exiting Function, returning amIClosetoLocation = " + amIClosetoLocation);
return amIClosetoLocation;
}
@Override
public void onConnected(@Nullable Bundle bundle) {
mLog.printToLog(className + Constants.funcStart + MethodName.methodName() + ": Entered Function");
@Override
public void onConnectionSuspended(int i) {
}
}