1

Я пытаюсь сделать это с 7 дней без каких-либо результатов. Проблема в ResultCallback, для геообработки мне нужен ResultCallback, а для LocationSettings мне нужен ResultCallback, есть ли способ сделать это? я ценю некоторые советы ... Я использую последние Google Play Services 7.0 Спасибо за поддержку :)Android new LocationSettings and Geofencing

public class GeofenceIntentService 
     extends IntentService 
     implements GoogleApiClient.ConnectionCallbacks, 
        GoogleApiClient.OnConnectionFailedListener, 
        ResultCallback<Status>, ResultCallback<LocationSettingsResult> { 

    // onResult for geofencing 
    public void onResult(Status status) { 
     Log.i(TAG, "onResult"); 
     if (status.isSuccess()) { 
      Log.i(TAG, "status.isSuccess()"); 
     } else { 
      String errorMessage = GeofenceErrorMessages.getErrorString(getApplicationContext(), 
       status.getStatusCode()); 
      Log.e(TAG, errorMessage); 
     } 
    } 

    // onResult for LocationSettings 
    @Override 
    public void onResult(LocationSettingsResult locationSettingsResult) { 
     final Status status = locationSettingsResult.getStatus(); 
     switch (status.getStatusCode()) { 
      case LocationSettingsStatusCodes.SUCCESS: 
       Log.i(TAG, "All location settings are satisfied."); 
       startLocationUpdates(); 
       break; 
      case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
       Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to" + 
         "upgrade location settings "); 

       try { 
        // Show the dialog by calling startResolutionForResult(), and check the result 
        // in onActivityResult(). 
        status.startResolutionForResult(BaseActivity.this, REQUEST_CHECK_SETTINGS); 
       } catch (IntentSender.SendIntentException e) { 
        Log.i(TAG, "PendingIntent unable to execute request."); 
       } 
       break; 
      case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
       Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " + 
         "not created."); 
       break; 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
      // Check for the integer request code originally supplied to startResolutionForResult(). 
      case REQUEST_CHECK_SETTINGS: 
       switch (resultCode) { 
        case Activity.RESULT_OK: 
         Log.i(TAG, "User agreed to make required location settings changes."); 
         startLocationUpdates(); 
         break; 
        case Activity.RESULT_CANCELED: 
         Log.i(TAG, "User chose not to make required location settings changes."); 
         break; 
       } 
       break; 
     } 
    } 
} 
+0

Вы можете разместить код, объясните, что вы делали до сих пор, и объяснить, что не работает? –

+0

Да, после прочтения вопроса, я не знаю, о чем вы спрашиваете ... –

+0

@AlexBaker: днем ​​я предоставил образец ... – geolyth

ответ

1

У меня была такая же проблема, и это то, что я сделал

Определение класса:

public class Activity/Service extends AppCompatActivity/IntentService implements 
     ConnectionCallbacks, 
     OnConnectionFailedListener, 
     ResultCallback<Status> { 
    ... 
} 

Для GeofencingApi:

public void addGeofencesButtonHandler(View view) { 
    if (!mGoogleApiClient.isConnected()) { 
     // Log.e(TAG, "Not connected"); 
     return; 
    } 

    try { 
     PendingResult<Status> result = 
       LocationServices.GeofencingApi.addGeofences(
         mGoogleApiClient, 
         getGeofencingRequest(), 
         getGeofencePendingIntent() 
       ); 

     result.setResultCallback(this); 
    } catch (SecurityException securityException) { 
     logSecurityException(securityException); 
    } 
} 

Для SettingsApi:

Used сцепления с setResultCallback

protected void checkLocationSettings() { 
      LocationServices.SettingsApi.checkLocationSettings(
        mGoogleApiClient, 
        mLocationSettingsRequest 
      ).setResultCallback(new ResultCallback<LocationSettingsResult>() { 
       @Override 
       public void onResult(LocationSettingsResult locationSettingsResult) { 
        final Status status = locationSettingsResult.getStatus(); 
        switch (status.getStatusCode()) { 
         case LocationSettingsStatusCodes.SUCCESS: 
          Log.i(TAG, "All location settings are satisfied."); 
          if (!mRequestingLocationUpdates) { 
           mRequestingLocationUpdates = true; 
           setButtonsEnabledState(); 
           startLocationUpdates(); 
          } 
          break; 
         case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
          Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to" + 
            "upgrade location settings "); 
          try { 
           status.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS); 
          } catch (IntentSender.SendIntentException e) { 
           Log.i(TAG, "PendingIntent unable to execute request."); 
          } 
          break; 
         case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
          Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " + 
            "not created."); 
          break; 
        } 
       } 
      }); 
}