5

バックグラウンドから位置情報を取得しようとしています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) {

}
}
4

1 に答える 1

1

new GoogleApiClient.Builder(context)2 番目のパラメーターはコールバック リスナーであり、それを見逃しています。

つまり:new GoogleApiClient.Builder(context, this)

于 2016-11-18T12:17:27.497 に答える