diff --git a/apps/Pump/build.gradle b/apps/Pump/build.gradle
index 13b8cec..459a46a 100644
--- a/apps/Pump/build.gradle
+++ b/apps/Pump/build.gradle
@@ -20,7 +20,7 @@
     compileSdkVersion 28
     buildToolsVersion '28.0.3'
     defaultConfig {
-        minSdkVersion 16
+        minSdkVersion 19 // TODO: Lower to 16 after media2-widget supports 16
         targetSdkVersion 28
         versionCode 1
         versionName '1.0'
@@ -46,6 +46,7 @@
 dependencies {
     implementation 'androidx.appcompat:appcompat:1.0.2'
     implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
+    implementation 'androidx.media2:media2-widget:1.0.0-alpha06'
     implementation 'androidx.mediarouter:mediarouter:1.0.0'
     implementation 'com.google.android.material:material:1.0.0'
 }
diff --git a/apps/Pump/java/com/android/pump/activity/AudioPlayerActivity.java b/apps/Pump/java/com/android/pump/activity/AudioPlayerActivity.java
index a3fbe59..f42c2a7 100644
--- a/apps/Pump/java/com/android/pump/activity/AudioPlayerActivity.java
+++ b/apps/Pump/java/com/android/pump/activity/AudioPlayerActivity.java
@@ -23,15 +23,23 @@
 import android.os.Bundle;
 import android.provider.MediaStore;
 
+import com.android.pump.R;
 import com.android.pump.db.Audio;
+import com.android.pump.util.Clog;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.UiThread;
 import androidx.appcompat.app.AppCompatActivity;
+import androidx.media2.UriMediaItem;
+import androidx.media2.widget.VideoView;
 
 @UiThread
 public class AudioPlayerActivity extends AppCompatActivity {
+    private static final String TAG = Clog.tag(AudioPlayerActivity.class);
+
+    private VideoView mVideoView;
+
     public static void start(@NonNull Context context, @NonNull Audio audio) {
         // TODO Find a better URI (audio.getUri()?)
         Uri uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
@@ -45,5 +53,21 @@
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_audio_player);
+        mVideoView = findViewById(R.id.video_view);
+
+        handleIntent();
+    }
+
+    private void handleIntent() {
+        Intent intent = getIntent();
+        Uri uri = intent.getData();
+        if (uri == null) {
+            Clog.e(TAG, "The intent has no uri. Finishing activity...");
+            finish();
+            return;
+        }
+        UriMediaItem mediaItem = new UriMediaItem.Builder(this, uri).build();
+        mVideoView.setMediaItem(mediaItem);
     }
 }
diff --git a/apps/Pump/java/com/android/pump/activity/VideoPlayerActivity.java b/apps/Pump/java/com/android/pump/activity/VideoPlayerActivity.java
index 5884dda..21e2cac 100644
--- a/apps/Pump/java/com/android/pump/activity/VideoPlayerActivity.java
+++ b/apps/Pump/java/com/android/pump/activity/VideoPlayerActivity.java
@@ -23,15 +23,23 @@
 import android.os.Bundle;
 import android.provider.MediaStore;
 
+import com.android.pump.R;
 import com.android.pump.db.Video;
+import com.android.pump.util.Clog;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.UiThread;
 import androidx.appcompat.app.AppCompatActivity;
+import androidx.media2.UriMediaItem;
+import androidx.media2.widget.VideoView;
 
 @UiThread
 public class VideoPlayerActivity extends AppCompatActivity {
+    private static final String TAG = Clog.tag(VideoPlayerActivity.class);
+
+    private VideoView mVideoView;
+
     public static void start(@NonNull Context context, @NonNull Video video) {
         // TODO Find a better URI (video.getUri()?)
         Uri uri = ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
@@ -45,5 +53,21 @@
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_video_player);
+        mVideoView = findViewById(R.id.video_view);
+
+        handleIntent();
+    }
+
+    private void handleIntent() {
+        Intent intent = getIntent();
+        Uri uri = intent.getData();
+        if (uri == null) {
+            Clog.e(TAG, "The intent has no uri. Finishing activity...");
+            finish();
+            return;
+        }
+        UriMediaItem mediaItem = new UriMediaItem.Builder(this, uri).build();
+        mVideoView.setMediaItem(mediaItem);
     }
 }
diff --git a/apps/Pump/res/layout/activity_audio_player.xml b/apps/Pump/res/layout/activity_audio_player.xml
new file mode 100644
index 0000000..1eac3bd
--- /dev/null
+++ b/apps/Pump/res/layout/activity_audio_player.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright 2018 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <androidx.media2.widget.VideoView
+        android:id="@+id/video_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+    />
+
+</LinearLayout>
diff --git a/apps/Pump/res/layout/activity_video_player.xml b/apps/Pump/res/layout/activity_video_player.xml
new file mode 100644
index 0000000..1eac3bd
--- /dev/null
+++ b/apps/Pump/res/layout/activity_video_player.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright 2018 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <androidx.media2.widget.VideoView
+        android:id="@+id/video_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+    />
+
+</LinearLayout>
diff --git a/build.gradle b/build.gradle
index a19659a..958133c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -27,8 +27,10 @@
 allprojects {
     repositories {
         jcenter()
-        maven { url 'https://maven.google.com' }
         google()
+
+        // TODO: Remove before releasing and after stable media2 is released
+        maven { url "$rootDir/../../../prebuilts/sdk/current/androidx/m2repository" }
     }
 }
 
