我想在片段中使用CastStateListener来检查投射设备是否可用。片段中使用的代码是
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mCastContext = CastContext.getSharedInstance(mContext)
mCastStateListener = CastStateListener { newState ->
if (newState != CastState.NO_DEVICES_AVAILABLE) {
castDevicesAvailable = true
}
}
}
override fun onResume() {
super.onResume()
mCastContext?.addCastStateListener(mCastStateListener)
}
override fun onPause() {
super.onPause()
mCastContext?.removeCastStateListener(mCastStateListener)
}
此代码在Fragment中使用时,不会在CastListner内部给我回叫,但是在Activity或Fragment中使用时,它可以正常工作。
我正在使用自定义视图
<androidx.mediarouter.app.MediaRouteButton
android:id="@+id/media_route_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:actionButtonStyle="@android:style/Widget.Holo.Light.MediaRouteButton"/>
我想基于可用的投射设备隐藏/显示视图
我认为在片段中使用CastStateListener不是一个好主意。因为一个活动可以承载多个片段。暂停活动后,活动中的所有片段都会暂停,因此将继续。在代码中,如果您在片段onResume中添加CastStateListener并在片段onPause中删除CastStateListener。如果活动包含多个片段,则很容易弄乱添加/删除CastStateListener。因此,我认为最好在活动生命周期中添加/删除CastStateListener。