Skip to content
This repository was archived by the owner on Jul 8, 2025. It is now read-only.

Commit 2a64f85

Browse files
committed
WIP - Seamless transfer support
1 parent 5bae931 commit 2a64f85

File tree

4 files changed

+39
-0
lines changed

4 files changed

+39
-0
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@
9292
</intent-filter>
9393
</service>
9494

95+
<receiver android:name="androidx.mediarouter.media.MediaTransferReceiver" />
96+
9597
</application>
9698

9799
</manifest>

app/src/main/java/com/example/android/uamp/MainActivity.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ import android.view.Menu
2323
import androidx.activity.viewModels
2424
import androidx.appcompat.app.AppCompatActivity
2525
import androidx.lifecycle.Observer
26+
import androidx.lifecycle.ViewModelProviders
27+
import androidx.mediarouter.media.MediaControlIntent
28+
import androidx.mediarouter.media.MediaRouteSelector
29+
import androidx.mediarouter.media.MediaRouter
30+
import androidx.mediarouter.media.MediaRouterParams
2631
import com.example.android.uamp.fragments.MediaItemFragment
2732
import com.example.android.uamp.media.MusicService
2833
import com.example.android.uamp.utils.Event
@@ -31,12 +36,16 @@ import com.example.android.uamp.viewmodels.MainActivityViewModel
3136
import com.google.android.gms.cast.framework.CastButtonFactory
3237
import com.google.android.gms.cast.framework.CastContext
3338

39+
3440
class MainActivity : AppCompatActivity() {
3541

3642
private val viewModel by viewModels<MainActivityViewModel> {
3743
InjectorUtils.provideMainActivityViewModel(this)
3844
}
3945
private var castContext: CastContext? = null
46+
private lateinit var selector: MediaRouteSelector
47+
private lateinit var router: MediaRouter
48+
4049

4150
override fun onCreate(savedInstanceState: Bundle?) {
4251
super.onCreate(savedInstanceState)
@@ -47,6 +56,16 @@ class MainActivity : AppCompatActivity() {
4756

4857
setContentView(R.layout.activity_main)
4958

59+
router = MediaRouter.getInstance(this)
60+
selector = MediaRouteSelector.Builder()
61+
.addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
62+
.build()
63+
router.routerParams = MediaRouterParams.Builder().setTransferToLocalEnabled(true).build()
64+
router.addCallback(
65+
selector, MediaRouterCallback(),
66+
MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY
67+
)
68+
5069
// Since UAMP is a music player, the volume controls should adjust the music volume while
5170
// in the app.
5271
volumeControlStream = AudioManager.STREAM_MUSIC
@@ -114,4 +133,20 @@ class MainActivity : AppCompatActivity() {
114133
private fun getBrowseFragment(mediaId: String): MediaItemFragment? {
115134
return supportFragmentManager.findFragmentByTag(mediaId) as MediaItemFragment?
116135
}
136+
137+
private inner class MediaRouterCallback : MediaRouter.Callback() {
138+
override fun onRouteSelected(
139+
router: MediaRouter,
140+
route: MediaRouter.RouteInfo,
141+
reason: Int
142+
) {
143+
if (reason == MediaRouter.UNSELECT_REASON_ROUTE_CHANGED) {
144+
Log.d(TAG, "Unselected because route changed, continue playback")
145+
} else if (reason == MediaRouter.UNSELECT_REASON_STOPPED) {
146+
Log.d(TAG, "Unselected because route was stopped, stop playback")
147+
}
148+
}
149+
}
117150
}
151+
152+
private const val TAG = "MainActivity"

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ buildscript {
2828
androidx_car_version = '1.0.0-alpha7'
2929
androidx_core_ktx_version = '1.3.1'
3030
androidx_media_version = '1.0.1'
31+
androidx_mediarouter_version = '1.2.0-rc01'
3132
androidx_preference_version = '1.1.1'
3233
androidx_test_runner_version = '1.3.0'
3334
arch_lifecycle_version = '2.2.0'

common/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ dependencies {
5151
api "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version"
5252

5353
api "androidx.media:media:$androidx_media_version"
54+
implementation "androidx.mediarouter:mediarouter:$androidx_mediarouter_version"
5455

5556
api "com.google.code.gson:gson:$gson_version"
5657

0 commit comments

Comments
 (0)