在Android上,如何检查手机屏幕是否铸造?



我需要检查我的应用程序运行的Android手机是否正在使用在我的应用程序之外启用的casting。

似乎CastSession或SessionManager可以提供与我的应用程序相关的会话,这对我没有帮助。

例如,我可以用一个叫xx的应用程序开始投射,它会投射或镜像我手机的整个屏幕。现在,当我打开应用程序时,我需要通知手机屏幕正在投射/镜像,这样我就可以防止在我的应用程序上显示特定内容。

我用下面的代码检查了一下:

val isCastingEnabledLiveData = MutableLiveData<Boolean>()
fun isCastingEnabled(context: Context): Boolean {
val mediaRouter = MediaRouter.getInstance(context)
if (mediaRouter.routes.size <= 1) {
isCastingEnabledLiveData.value = false
return
}
val selector = MediaRouteSelector.Builder()
.addControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO)
.addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
.build()
mediaRouter.addCallback(selector, object : MediaRouter.Callback() {
override fun onRouteChanged(router: MediaRouter?, route: MediaRouter.RouteInfo?) {
super.onRouteChanged(router, route)
isCastingEnabledLiveData.value = if (route != mediaRouter.defaultRoute) {
route?.connectionState != MediaRouter.RouteInfo.CONNECTION_STATE_DISCONNECTED
} else false
}
})
}

你可以使用MediaRouter类来检查手机屏幕是否在投射。

下面是一个如何检查手机屏幕是否在投射的例子:

MediaRouter mediaRouter = (MediaRouter) 
getSystemService(Context.MEDIA_ROUTER_SERVICE);
MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute();
if(route.isDefault()){
// Screen is not casting
} else {
// Screen is casting
}

这段代码使用MediaRouter类的getSelectedRoute()方法来获取当前选择的路由。如果返回的RouteInfo对象是默认路由,那么屏幕没有进行类型转换,否则是。

请注意,这段代码使用getSystemService(context. media_router_service)方法来获取MediaRouter类的实例,所以它应该从Activity或Service上下文中调用。

此外,您还可以使用MediaRouter。回调和MediaRouter。addCallback设置一个回调来监视转换的状态,这样您也可以获得转换状态更改的更新。

相关内容

最新更新