2

背景

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

这似乎有两种可能:

问题

查看内置拨号器的工作原理,如果用户在沉浸式模式下使用应用程序(横向的游戏或 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 版本支持它?

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

4

1 回答 1

1

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

在您的通知构建器中,使用 Pending Intent 启动来电 UI 的全屏版本:builder.setContentIntent(pendingIntent); builder.setFullScreenIntent(pendingIntent, true);

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

于 2018-07-03T22:22:21.180 回答