เฟรมเวิร์กของเราเตอร์สื่อ Android ช่วยให้ผู้ผลิตเปิดใช้การเล่นในอุปกรณ์ของตนได้
ผ่านอินเทอร์เฟซมาตรฐานที่เรียกว่า MediaRouteProvider
ผู้ให้บริการเส้นทางกำหนดอินเทอร์เฟซทั่วไปสำหรับเล่นสื่อในอุปกรณ์รับ
สามารถเล่นสื่อบนอุปกรณ์จากแอปพลิเคชัน Android ใดก็ได้ที่สนับสนุนสื่อ
เส้นทาง
คู่มือนี้จะอธิบายวิธีสร้างผู้ให้บริการเส้นทางสื่อสำหรับอุปกรณ์ผู้รับและวิธี
ใช้ได้กับแอปพลิเคชันเล่นสื่ออื่นๆ ที่ทำงานใน Android ในการใช้ API นี้ คุณต้อง
ควรทำความคุ้นเคยกับคลาสคีย์
MediaRouteProvider
MediaRouteProviderDescriptor
และ
RouteController
ภาพรวม
เฟรมเวิร์กเราเตอร์สื่อของ Android ช่วยให้นักพัฒนาแอปสื่อและอุปกรณ์เล่นสื่อได้
ผู้ผลิตในการเชื่อมต่อผ่าน API และอินเทอร์เฟซผู้ใช้ทั่วไป นักพัฒนาแอปที่
ติดตั้งใช้งานอินเทอร์เฟซ MediaRouter
จึงจะเชื่อมต่อกับ
จัดเฟรมเวิร์กและเล่นเนื้อหาไปยังอุปกรณ์ที่เข้าร่วมเฟรมเวิร์กของเราเตอร์สื่อ สื่อ
ผู้ผลิตอุปกรณ์การเล่นสามารถเข้าร่วมในกรอบงานโดยการเผยแพร่ MediaRouteProvider
ที่อนุญาตให้แอปพลิเคชันอื่นๆ เชื่อมต่อและ
เล่นสื่อในอุปกรณ์รับ รูปที่ 1 แสดงให้เห็นว่าแอปเชื่อมต่อกับผู้รับ
อุปกรณ์ผ่านเฟรมเวิร์กของเราเตอร์สื่อ
เมื่อคุณสร้างผู้ให้บริการเส้นทางสื่อสำหรับอุปกรณ์ผู้รับ ผู้ให้บริการดังกล่าวจะให้บริการ วัตถุประสงค์ต่อไปนี้
- อธิบายและเผยแพร่ความสามารถของอุปกรณ์ที่เป็นผู้รับเพื่อให้แอปอื่นๆ ค้นพบได้ และใช้ฟีเจอร์การเล่น
- รวมอินเทอร์เฟซการเขียนโปรแกรมของอุปกรณ์รับและการสื่อสารของอุปกรณ์ กลไกการส่งข้อมูลเพื่อให้อุปกรณ์เข้ากันได้กับเฟรมเวิร์กของเราเตอร์สื่อ
การกระจายของผู้ให้บริการเส้นทาง
ผู้ให้บริการเส้นทางสื่อได้รับการเผยแพร่โดยเป็นส่วนหนึ่งของแอป Android ผู้ให้บริการเส้นทางของคุณอาจจะเป็น
ให้แอปอื่นๆ ใช้งานได้ด้วยการขยาย
MediaRouteProviderService
หรือสรุปการติดตั้งใช้งาน
MediaRouteProvider
ด้วยบริการของคุณเองและประกาศความตั้งใจ
สำหรับผู้ให้บริการเส้นทางสื่อ ขั้นตอนเหล่านี้ช่วยให้แอปอื่นๆ สามารถค้นพบและใช้ประโยชน์จาก
เส้นทางสื่อของคุณ
หมายเหตุ: แอปที่มีผู้ให้บริการเส้นทางสื่อยังสามารถรวม อินเทอร์เฟซ MediaRouter ไปยัง แต่ไม่จำเป็นต้องระบุ
ไลบรารีการสนับสนุน MediaRouter
มีการกําหนด API ของเราเตอร์สื่อไว้ในส่วน ไลบรารี AndroidX MediaRouter คุณต้องเพิ่มไลบรารีนี้ลงในโปรเจ็กต์การพัฒนาแอปของคุณ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มไลบรารีการสนับสนุนไปยัง โปรดดูโปรเจ็กต์ที่หัวข้อการตั้งค่าไลบรารีการสนับสนุน
ข้อควรระวัง: อย่าลืมใช้ AndroidX
การใช้งานเฟรมเวิร์กของเราเตอร์สื่อ
อย่าใช้แพ็กเกจ android.media
เวอร์ชันเก่า
การสร้างบริการของผู้ให้บริการ
เฟรมเวิร์กของเราเตอร์สื่อต้องค้นพบและเชื่อมต่อกับผู้ให้บริการเส้นทางสื่อของคุณได้
อนุญาตให้แอปพลิเคชันอื่นใช้เส้นทางของคุณได้ โดยเฟรมเวิร์กของเราเตอร์สื่อ
จะค้นหาแอปที่ประกาศการดำเนินการ Intent ของผู้ให้บริการเส้นทางสื่อ เมื่อแอปอื่นต้องการ
เชื่อมต่อกับผู้ให้บริการ เฟรมเวิร์กจะต้องสามารถเรียกใช้ และเชื่อมต่อกับผู้ให้บริการได้ ดังนั้นผู้ให้บริการ
ต้องอยู่ใน Service
โค้ดตัวอย่างต่อไปนี้แสดงการประกาศบริการของผู้ให้บริการเส้นทางสื่อและ ตัวกรอง Intent ในไฟล์ Manifest ซึ่งช่วยให้เราเตอร์สื่อค้นพบและใช้งานได้ เฟรมเวิร์ก:
<service android:name=".provider.SampleMediaRouteProviderService" android:label="@string/sample_media_route_provider_service" android:process=":mrp"> <intent-filter> <action android:name="android.media.MediaRouteProviderService" /> </intent-filter> </service>
ตัวอย่างไฟล์ Manifest นี้จะประกาศบริการที่รวมคลาสของผู้ให้บริการเส้นทางสื่อจริง
เฟรมเวิร์กของเราเตอร์สื่อ Android มอบ
คลาส MediaRouteProviderService
สำหรับใช้เป็น Wrapper บริการสำหรับ
ของผู้ให้บริการเส้นทางสื่อ โค้ดตัวอย่างต่อไปนี้แสดงวิธีใช้ Wrapper นี้
ชั้นเรียน:
Kotlin
class SampleMediaRouteProviderService : MediaRouteProviderService() { override fun onCreateMediaRouteProvider(): MediaRouteProvider { return SampleMediaRouteProvider(this) } }
Java
public class SampleMediaRouteProviderService extends MediaRouteProviderService { @Override public MediaRouteProvider onCreateMediaRouteProvider() { return new SampleMediaRouteProvider(this); } }
การระบุความสามารถของเส้นทาง
แอปที่เชื่อมต่อกับเฟรมเวิร์กของเราเตอร์สื่อสามารถค้นพบเส้นทางสื่อผ่าน ที่มีการประกาศไฟล์ Manifest ของแอป แต่ก็จําเป็นต้องทราบความสามารถของเส้นทางสื่อของคุณด้วย ที่มีให้ เส้นทางสื่ออาจเป็นได้หลายประเภท มีฟีเจอร์แตกต่างกัน และจะมีแอปอื่นๆ ด้วย ต้องค้นพบรายละเอียดเหล่านี้เพื่อดูว่าเข้ากันได้กับเส้นทางของคุณหรือไม่
เฟรมเวิร์กของเราเตอร์สื่อช่วยให้คุณกำหนดและเผยแพร่ความสามารถของสื่อได้
กำหนดเส้นทางผ่านวัตถุ IntentFilter
รายการ วัตถุ MediaRouteDescriptor
รายการ และ MediaRouteProviderDescriptor
ส่วนนี้จะอธิบายวิธีใช้
เพื่อเผยแพร่รายละเอียดเส้นทางสื่อสำหรับแอปอื่นๆ
หมวดหมู่เส้นทาง
ในคำอธิบายแบบเป็นโปรแกรมของผู้ให้บริการเส้นทางสื่อ คุณต้องระบุ ผู้ให้บริการรองรับการเล่นระยะไกล เอาต์พุตสำรอง หรือทั้ง 2 อย่าง นี่คือเส้นทาง หมวดหมู่ที่กำหนดโดยเฟรมเวิร์กของเราเตอร์สื่อมีดังนี้
CATEGORY_LIVE_AUDIO
— เอาต์พุตเสียงไปยังอุปกรณ์เอาต์พุตสำรอง เช่น ระบบเพลงที่เปิดใช้งานแบบไร้สายCATEGORY_LIVE_VIDEO
— เอาต์พุตวิดีโอไปยังอุปกรณ์เอาต์พุตสำรอง เช่น อุปกรณ์แสดงผลแบบไร้สายCATEGORY_REMOTE_PLAYBACK
— เล่นวิดีโอหรือเสียงในอุปกรณ์แยกต่างหากที่จัดการสื่อ ดึงข้อมูล ถอดรหัส และเล่นวิดีโอ เช่น อุปกรณ์ Chromecast
หากต้องการรวมการตั้งค่าเหล่านี้ในคำอธิบายเส้นทางสื่อของคุณ คุณจะต้องแทรกการตั้งค่าไว้ใน
ออบเจ็กต์ IntentFilter
ซึ่งคุณเพิ่มลงใน
ออบเจ็กต์ MediaRouteDescriptor
รายการ:
Kotlin
class SampleMediaRouteProvider(context: Context) : MediaRouteProvider(context) { companion object { private val CONTROL_FILTERS_BASIC: ArrayList<IntentFilter> = IntentFilter().run { addCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK) arrayListOf(this) } } }
Java
public final class SampleMediaRouteProvider extends MediaRouteProvider { private static final ArrayList<IntentFilter> CONTROL_FILTERS_BASIC; static { IntentFilter videoPlayback = new IntentFilter(); videoPlayback.addCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK); CONTROL_FILTERS_BASIC = new ArrayList<IntentFilter>(); CONTROL_FILTERS_BASIC.add(videoPlayback); } }
หากระบุ Intent CATEGORY_REMOTE_PLAYBACK
คุณต้องกำหนดประเภทสื่อและ
ผู้ให้บริการเส้นทางสื่อของคุณรองรับตัวควบคุมการเล่น ส่วนถัดไปจะอธิบายถึงวิธีการ
ระบุการตั้งค่าเหล่านี้สำหรับอุปกรณ์ของคุณ
ประเภทสื่อและโปรโตคอล
ผู้ให้บริการเส้นทางสื่อสำหรับอุปกรณ์การเล่นระยะไกลต้องระบุประเภทสื่อและการโอน
โปรโตคอลที่ระบบรองรับ คุณสามารถระบุการตั้งค่าเหล่านี้โดยใช้ IntentFilter
ชั้นเรียนและaddDataScheme()
และ
addDataType()
เมธอดของออบเจ็กต์นั้น
ข้อมูลโค้ดต่อไปนี้แสดงวิธีกำหนดตัวกรอง Intent เพื่อรองรับวิดีโอระยะไกล
เล่นโดยใช้ http, https และโปรโตคอลการสตรีมแบบเรียลไทม์ (RTSP) ดังนี้
Kotlin
class SampleMediaRouteProvider(context: Context) : MediaRouteProvider(context) { companion object { private fun IntentFilter.addDataTypeUnchecked(type: String) { try { addDataType(type) } catch (ex: IntentFilter.MalformedMimeTypeException) { throw RuntimeException(ex) } } private val CONTROL_FILTERS_BASIC: ArrayList<IntentFilter> = IntentFilter().run { addCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK) addAction(MediaControlIntent.ACTION_PLAY) addDataScheme("http") addDataScheme("https") addDataScheme("rtsp") addDataTypeUnchecked("video/*") arrayListOf(this) } } ... }
Java
public final class SampleMediaRouteProvider extends MediaRouteProvider { private static final ArrayList<IntentFilter> CONTROL_FILTERS_BASIC; static { IntentFilter videoPlayback = new IntentFilter(); videoPlayback.addCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK); videoPlayback.addAction(MediaControlIntent.ACTION_PLAY); videoPlayback.addDataScheme("http"); videoPlayback.addDataScheme("https"); videoPlayback.addDataScheme("rtsp"); addDataTypeUnchecked(videoPlayback, "video/*"); CONTROL_FILTERS_BASIC = new ArrayList<IntentFilter>(); CONTROL_FILTERS_BASIC.add(videoPlayback); } ... private static void addDataTypeUnchecked(IntentFilter filter, String type) { try { filter.addDataType(type); } catch (MalformedMimeTypeException ex) { throw new RuntimeException(ex); } } }
ส่วนควบคุมการเล่น
ผู้ให้บริการเส้นทางสื่อที่มีการเล่นระยะไกลต้องระบุประเภทของตัวควบคุมสื่อ ที่รองรับ การควบคุมประเภททั่วไปที่เส้นทางสื่อมีได้มีดังนี้
- ตัวควบคุมการเล่น เช่น เล่น หยุดชั่วคราว กรอกลับ และกรอไปข้างหน้า
- ฟีเจอร์การจัดคิว ช่วยให้แอปที่ส่งเพิ่มและนำรายการออกได้ จากเพลย์ลิสต์ที่ดูแลจัดการโดยอุปกรณ์ที่เป็นผู้รับ
- ฟีเจอร์เซสชัน ซึ่งป้องกันไม่ให้ส่งแอปแทรกแซง โดยให้อุปกรณ์ที่เป็นผู้รับระบุรหัสเซสชัน ให้กับแอปที่ส่งคำขอ แล้วตรวจสอบ กับคำขอควบคุมการเล่นในครั้งต่อๆ ไป
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้างตัวกรอง Intent เพื่อสนับสนุน การควบคุมการเล่นเส้นทางสื่อพื้นฐาน:
Kotlin
class SampleMediaRouteProvider(context: Context) : MediaRouteProvider(context) { companion object { ... private val CONTROL_FILTERS_BASIC: ArrayList<IntentFilter> = run { val videoPlayback: IntentFilter = ... ... val playControls = IntentFilter().apply { addCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK) addAction(MediaControlIntent.ACTION_SEEK) addAction(MediaControlIntent.ACTION_GET_STATUS) addAction(MediaControlIntent.ACTION_PAUSE) addAction(MediaControlIntent.ACTION_RESUME) addAction(MediaControlIntent.ACTION_STOP) } arrayListOf(videoPlayback, playControls) } } ... }
Java
public final class SampleMediaRouteProvider extends MediaRouteProvider { private static final ArrayList<IntentFilter> CONTROL_FILTERS_BASIC; static { ... IntentFilter playControls = new IntentFilter(); playControls.addCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK); playControls.addAction(MediaControlIntent.ACTION_SEEK); playControls.addAction(MediaControlIntent.ACTION_GET_STATUS); playControls.addAction(MediaControlIntent.ACTION_PAUSE); playControls.addAction(MediaControlIntent.ACTION_RESUME); playControls.addAction(MediaControlIntent.ACTION_STOP); CONTROL_FILTERS_BASIC = new ArrayList<IntentFilter>(); CONTROL_FILTERS_BASIC.add(videoPlayback); CONTROL_FILTERS_BASIC.add(playControls); } ... }
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Intent ตัวควบคุมการเล่นที่ใช้ได้ โปรดดู
MediaControlIntent
ชั้นเรียน
MediaRouteProviderDescriptor
หลังจากกำหนดความสามารถของเส้นทางสื่อโดยใช้ออบเจ็กต์ IntentFilter
คุณจะสร้างออบเจ็กต์ข้อบ่งชี้สำหรับการเผยแพร่ไปยังได้
เฟรมเวิร์กเราเตอร์สื่อของ Android ออบเจ็กต์ข้อบ่งชี้นี้มีข้อมูลที่เฉพาะเจาะจงของสื่อของคุณ
ของความสามารถของเส้นทางเพื่อให้แอปพลิเคชันอื่นสามารถกำหนดวิธีโต้ตอบกับสื่อของคุณได้
เส้นทาง
โค้ดตัวอย่างต่อไปนี้แสดงวิธีเพิ่มตัวกรอง Intent ที่สร้างขึ้นก่อนหน้านี้ลงใน
MediaRouteProviderDescriptor
และตั้งค่าข้อบ่งชี้สำหรับการใช้โดย
เฟรมเวิร์กของเราเตอร์สื่อ:
Kotlin
class SampleMediaRouteProvider(context: Context) : MediaRouteProvider(context) { init { publishRoutes() } private fun publishRoutes() { val resources = context.resources val routeName: String = resources.getString(R.string.variable_volume_basic_route_name) val routeDescription: String = resources.getString(R.string.sample_route_description) // Create a route descriptor using previously created IntentFilters val routeDescriptor: MediaRouteDescriptor = MediaRouteDescriptor.Builder(VARIABLE_VOLUME_BASIC_ROUTE_ID, routeName) .setDescription(routeDescription) .addControlFilters(CONTROL_FILTERS_BASIC) .setPlaybackStream(AudioManager.STREAM_MUSIC) .setPlaybackType(MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE) .setVolumeHandling(MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE) .setVolumeMax(VOLUME_MAX) .setVolume(mVolume) .build() // Add the route descriptor to the provider descriptor val providerDescriptor: MediaRouteProviderDescriptor = MediaRouteProviderDescriptor.Builder() .addRoute(routeDescriptor) .build() // Publish the descriptor to the framework descriptor = providerDescriptor } ... }
Java
public SampleMediaRouteProvider(Context context) { super(context); publishRoutes(); } private void publishRoutes() { Resources r = getContext().getResources(); // Create a route descriptor using previously created IntentFilters MediaRouteDescriptor routeDescriptor = new MediaRouteDescriptor.Builder( VARIABLE_VOLUME_BASIC_ROUTE_ID, r.getString(R.string.variable_volume_basic_route_name)) .setDescription(r.getString(R.string.sample_route_description)) .addControlFilters(CONTROL_FILTERS_BASIC) .setPlaybackStream(AudioManager.STREAM_MUSIC) .setPlaybackType(MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE) .setVolumeHandling(MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE) .setVolumeMax(VOLUME_MAX) .setVolume(mVolume) .build(); // Add the route descriptor to the provider descriptor MediaRouteProviderDescriptor providerDescriptor = new MediaRouteProviderDescriptor.Builder() .addRoute(routeDescriptor) .build(); // Publish the descriptor to the framework setDescriptor(providerDescriptor); }
โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าข้อบ่งชี้ที่ใช้ได้ในเอกสารประกอบอ้างอิง
สำหรับ MediaRouteDescriptor
และ MediaRouteProviderDescriptor
การควบคุมเส้นทาง
ผู้ให้บริการจะเล่นเสียงเมื่อแอปพลิเคชันเชื่อมต่อกับผู้ให้บริการเส้นทางสื่อ
ผ่านเฟรมเวิร์กของเราเตอร์สื่อที่แอปอื่นๆ ส่งไปยังเส้นทางของคุณได้ เพื่อจัดการกับเรื่องเหล่านี้
คุณต้องติดตั้งใช้งานคลาส MediaRouteProvider.RouteController
ซึ่งจะประมวลผลคำสั่ง
และจัดการการสื่อสารที่แท้จริงไปยังอุปกรณ์ของผู้รับ
เฟรมเวิร์กของเราเตอร์สื่อเรียกใช้ onCreateRouteController()
ของผู้ให้บริการเส้นทางเพื่อรับอินสแตนซ์ของคลาสนี้ แล้วกำหนดเส้นทางคำขอไปยังคลาสดังกล่าว
วิธีการเหล่านี้เป็นวิธีหลักของคลาส MediaRouteProvider.RouteController
ซึ่งคุณต้องติดตั้งใช้งาน
ผู้ให้บริการเส้นทางสื่อของคุณ
onSelect()
— เรียกใช้เมื่อแอปพลิเคชันเลือกเส้นทางของคุณสำหรับการเล่น คุณใช้วิธีนี้ในการดำเนินการ การเตรียมความพร้อมต่างๆ ที่จำเป็นก่อนที่สื่อจะเริ่มเล่นonControlRequest()
— ส่งคำสั่งการเล่นที่เจาะจงไปยังอุปกรณ์ที่รับonSetVolume()
— ส่งคำขอไปยังอุปกรณ์ที่รับเพื่อตั้งค่าระดับเสียงการเล่นเป็น ค่าที่เจาะจงonUpdateVolume()
— ส่งคำขอไปยังอุปกรณ์ที่รับเพื่อแก้ไขการเล่น ตามจำนวนที่ระบุonUnselect()
— มีการเรียกใช้เมื่อแอปพลิเคชันยกเลิกการเลือกเส้นทางonRelease()
— เรียกใช้เมื่อเฟรมเวิร์กไม่จำเป็นต้องใช้เส้นทางอีกต่อไป ทำให้ ที่ไม่ซับซ้อน
คำขอควบคุมการเล่นทั้งหมดจะส่งไปยัง onControlRequest()
ยกเว้นการเปลี่ยนแปลงระดับเสียง
การใช้งานวิธีการนี้ของคุณต้องแยกวิเคราะห์คำขอควบคุมและตอบกลับคำขอเหล่านั้น
อย่างเหมาะสม ตัวอย่างการใช้เมธอดนี้ซึ่งจะประมวลผลคำสั่งสำหรับ
เส้นทางสื่อการเล่นระยะไกล:
Kotlin
private class SampleRouteController : MediaRouteProvider.RouteController() { ... override fun onControlRequest( intent: Intent, callback: MediaRouter.ControlRequestCallback? ): Boolean { return if (intent.hasCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)) { val action = intent.action when (action) { MediaControlIntent.ACTION_PLAY -> handlePlay(intent, callback) MediaControlIntent.ACTION_ENQUEUE -> handleEnqueue(intent, callback) MediaControlIntent.ACTION_REMOVE -> handleRemove(intent, callback) MediaControlIntent.ACTION_SEEK -> handleSeek(intent, callback) MediaControlIntent.ACTION_GET_STATUS -> handleGetStatus(intent, callback) MediaControlIntent.ACTION_PAUSE -> handlePause(intent, callback) MediaControlIntent.ACTION_RESUME -> handleResume(intent, callback) MediaControlIntent.ACTION_STOP -> handleStop(intent, callback) MediaControlIntent.ACTION_START_SESSION -> handleStartSession(intent, callback) MediaControlIntent.ACTION_GET_SESSION_STATUS -> handleGetSessionStatus(intent, callback) MediaControlIntent.ACTION_END_SESSION -> handleEndSession(intent, callback) else -> false }.also { Log.d(TAG, sessionManager.toString()) } } else { false } } ... }
Java
private final class SampleRouteController extends MediaRouteProvider.RouteController { ... @Override public boolean onControlRequest(Intent intent, ControlRequestCallback callback) { String action = intent.getAction(); if (intent.hasCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)) { boolean success = false; if (action.equals(MediaControlIntent.ACTION_PLAY)) { success = handlePlay(intent, callback); } else if (action.equals(MediaControlIntent.ACTION_ENQUEUE)) { success = handleEnqueue(intent, callback); } else if (action.equals(MediaControlIntent.ACTION_REMOVE)) { success = handleRemove(intent, callback); } else if (action.equals(MediaControlIntent.ACTION_SEEK)) { success = handleSeek(intent, callback); } else if (action.equals(MediaControlIntent.ACTION_GET_STATUS)) { success = handleGetStatus(intent, callback); } else if (action.equals(MediaControlIntent.ACTION_PAUSE)) { success = handlePause(intent, callback); } else if (action.equals(MediaControlIntent.ACTION_RESUME)) { success = handleResume(intent, callback); } else if (action.equals(MediaControlIntent.ACTION_STOP)) { success = handleStop(intent, callback); } else if (action.equals(MediaControlIntent.ACTION_START_SESSION)) { success = handleStartSession(intent, callback); } else if (action.equals(MediaControlIntent.ACTION_GET_SESSION_STATUS)) { success = handleGetSessionStatus(intent, callback); } else if (action.equals(MediaControlIntent.ACTION_END_SESSION)) { success = handleEndSession(intent, callback); } Log.d(TAG, sessionManager.toString()); return success; } return false; } ... }
คุณควรเข้าใจว่าคลาส MediaRouteProvider.RouteController
มีเจตนาที่จะทำหน้าที่เป็น Wrapper
สำหรับ API ไปยังอุปกรณ์เล่นสื่อของคุณ การนำวิธีการมาใช้ในชั้นเรียนนี้คือ
ทั้งหมดขึ้นอยู่กับอินเทอร์เฟซแบบเป็นโปรแกรมที่ได้จากอุปกรณ์ที่เป็นผู้รับ
โค้ดตัวอย่าง
MediaRouter ตัวอย่างแสดงวิธีสร้างผู้ให้บริการเส้นทางสื่อที่กำหนดเอง