2016-10-20 3 views
5

私は背景から場所を取得しようとしていますService。問題は、Awareness.SnapshotApi.getLocation(mGoogleApiClient).setResultCallback(new ResultCallback<LocationResult>()内のonResult()関数が呼び出されていないことです。ここで何が間違っているのでしょうか?Awareness.SnapshotApi.getLocationのonResult()がサービスから呼び出されない

関数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) { 

} 
} 

答えて

1

new GoogleApiClient.Builder(context)第2パラメータはコールバックリスナーであり、あなたはそれを逃しました。

私は意味:new GoogleApiClient.Builder(context, this)

+0

は、通話中に2つのコンテキストを持っていますか?私はあなたのソリューションを試して、これを持っています:http://imgur.com/a/uh5Y6 – user1406716

+0

リスナーを実装するものを渡します – eduyayo

+0

なぜ私は賞金を手に入れませんでしたか? – eduyayo

関連する問題