Question: Google Play Services provides an [`ActivityRecognitionApi`](https://developers.google.com/android/reference/com/google/android/gms/location/ActivityRecognitionApi) that lets you detect various user activities (via [`DetectedActivity`](https://developers.google.com/android/reference/com/google/android/gms/location/DetectedActivity)) such as if the user is [walking](https://developers.google.com/android/reference/com/google/android/gms/location/DetectedActivity.html#WALKING) or [running](https://developers.google.com/android/reference/com/google/android/gms/location/DetectedActivity.html#RUNNING).

Is it possible to mock these activities for development and testing purposes?

Answer: 
Yes, it's possible, but only on the emulator (or a rooted device).

For example, to simulate the walking activity run:

```
adb root
adb shell am broadcast -a com.google.gservices.intent.action.GSERVICES_OVERRIDE -e 'location:mock_activity_type' 'WALKING'

```

And then restart Google Play Services (or restart the device):

```
adb shell ps -A | grep com.google.android.gms.persistent | awk '{print $2}' | xargs adb shell kill

```
It's possible to do it without the adb commands. Create and send an intent with the correct extra. 

Add the transitions you need to a list and add that list to the constructor of an ActivityTransitionResult object. To create the extra, use SafeParcelableSerializer.serializeToIntentExtra with the key "com.google.android.location.internal.EXTRA\_ACTIVITY\_TRANSITION\_RESULT"

I have used this code to simulate the transition from still to walking.

```
Intent intent = new Intent();
intent.setAction("MYLISTENINGACTION");
List<ActivityTransitionEvent> events = new ArrayList<>();
ActivityTransitionEvent transitionEvent;
transitionEvent = new ActivityTransitionEvent(DetectedActivity.STILL, 
   ActivityTransition.ACTIVITY_TRANSITION_EXIT, SystemClock.elapsedRealtimeNanos());
events.add(transitionEvent);
transitionEvent = new ActivityTransitionEvent(DetectedActivity.WALKING, 
   ActivityTransition.ACTIVITY_TRANSITION_ENTER, SystemClock.elapsedRealtimeNanos());
events.add(transitionEvent);
ActivityTransitionResult result = new ActivityTransitionResult(events);
SafeParcelableSerializer.serializeToIntentExtra(result, intent, 
   "com.google.android.location.internal.EXTRA_ACTIVITY_TRANSITION_RESULT");
sendBroadcast(intent);

```