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。