是否可以确定屏幕现在是否身临其境,即使不在前台?



Background

我正在研究当用户接到电话(传入/传出电话(时如何替换拨号器的 UI。

这似乎可以通过两种方式实现:

  • 在旧的Android版本上,可以通过PHONE_STATE_CHANGED和NEW_OUTGOING_CALL意图触发的俯视图来实现。

  • 在新的Android版本(至少API 23 - Android M-6.0(上,可以通过扩展InCallService并提供将从那里打开的活动。我什至在这里找到了一个例子。

问题所在

查看内置拨号器的工作原理,如果用户在沉浸式模式下使用应用(横向游戏或 YouTube 视频(,并且现在设备正在振铃(来电(,则会显示通知而不是全屏活动。

但是我找不到如何使用 API 来做到这一点。

我尝试过什么

我试图查看InCallService的所有文档。我还尝试通过检查从 WindowManager 获得的各种值来区分沉浸式和非沉浸式:

val wm = getSystemService(Service.WINDOW_SERVICE) as WindowManager
val display = wm.defaultDisplay
val metrics = DisplayMetrics()
display.getMetrics(metrics)
val realMetrics = DisplayMetrics()
display.getRealMetrics(realMetrics)
val realSize = Point()
display.getRealSize(realSize)
val size = Point()
display.getSize(size)
Log.d("AppLog", "mode:${display.mode} state:${display.state} size:$size realSize:$realSize metrics:$metrics realMetrics:$realMetrics rotation:${display.rotation}")

我想可以使用辅助功能服务(不确定如何(检查它,但这似乎

太多了。

问题

应用程序是否可以检查屏幕现在是否处于沉浸式模式?

如果可能,如何以及从哪个Android版本支持?

如果不可能,为什么内置应用程序知道如何检查它?

您应该将来电作为通知发布。

在通知构建器中,使用"挂起"意向启动传入呼叫 UI 的全屏版本: builder.setContentIntent(pendingIntent(; builder.setFullScreenIntent(pendingIntent, true(;

如果有任何正在进行的活动,系统将显示提醒通知(并且应考虑沉浸式模式(。 如果用户的设备处于关闭状态且处于锁定屏幕上,则全屏意向将用于启动全屏 UI。

相关内容

最新更新