2016-10-20 15 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)第二個參數是回調監聽器,你錯過了。

我的意思是:new GoogleApiClient.Builder(context, this)

+0

在調用中有兩個上下文嗎?我嘗試了你的解決方案,並得到了這個:http://imgur.com/a/uh5Y6 – user1406716

+0

通過一個實現了聽衆 – eduyayo

+0

爲什麼它我沒有得到賞金? – eduyayo