背景
我正在研究如何在用户接到电话(呼入/呼出电话)时更换拨号器的 UI。
这似乎有两种可能:
在旧的 Android 版本上,可以通过PHONE_STATE_CHANGED和NEW_OUTGOING_CALL Intents触发顶部视图。
在新的 Android 版本(至少 API 23 - Android M-6.0)上,可以通过扩展InCallService并提供将从那里打开的 Activity。我什至在这里找到了一个例子。
问题
查看内置拨号器的工作原理,如果用户在沉浸式模式下使用应用程序(横向的游戏或 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 版本支持它?
如果不可能,内置应用程序怎么知道如何检查它?