Apologies for never posting back, i had forgotten all about this question.
Whatever my solution was in the past would not have been correct as i recently added a more efficient way to do this.
First.. if you are using FusedLocationAPI and GoogleApiClient, then see my answer posted here.
If you are using the LocationManager class and not the GoogleApiClient, then the solution is similar.
You need to create two requestLocationUpdates, one for Time only, and one for Distance only, with the unused field set to 0, for example:
locationManager.requestLocationUpdates(bestProvider, 0, UPDATE_MIN_DISTNACE, myBackupLocationDistanceIntervalListener);
locationManager.requestLocationUpdates(bestProvider, UPDATE_TIME_INTERVAL, 0, myBackupLocationTimeIntervalListener);
This can also be done with Criteria if need be:
locationManager.requestLocationUpdates(0, UPDATE_MIN_DISTNACE, gpsCriteria, myBackupLocationDistanceIntervalListener, Looper.getMainLooper());
locationManager.requestLocationUpdates(UPDATE_TIME_INTERVAL, 0, gpsCriteria, myBackupLocationTimeIntervalListener, Looper.getMainLooper());
Then just define your listeners. You can use either the same or separate listeners to handle the results from the requests.
Hope this helps.