我正在编写一个 API 级别为 15 及以上的 Android 设备将使用的 SDK。我目前的目标是 sdk 版本 22。我想要完成的是确定屏幕是打开还是关闭。有时我会在应用程序处于前台或后台时执行此操作,有时我会在应用程序关闭时使用警报执行此操作。我想要做的是询问框架屏幕是打开还是关闭,但对于 <= 19 的 android 版本来说,这似乎是不可能的。
看起来 sdk 版本 19 允许设备使用 PowerManager.isScreenOn() 来确定屏幕的状态,但是当版本 20 出现时,该方法已被弃用,现在您可以调用 PowerManager.isInteractive() 但这仅适用于设备运行 API 20 及更高版本。如果您尝试使用运行 API 19 或更低版本的设备调用 isScreenOn(),则该调用实际上只是包装了 isInteractive(),您最终会得到一个在日志中找不到的方法,并且实际上并没有得到您想要的数据。
因此,如果我总是想知道设备 <= 19 的屏幕当前状态,一种解决方法是启动一个基本上总是运行的后台服务,并注册一个寻找 ACTION_SCREEN_ON 和 ACTION_SCREEN_OFF 意图的广播接收器. 这显然是不可取的,因为那时我必须有一个不推荐的始终在线服务。
我想另一种解决方法是在我构建时再次编译 sdk 19,这将使 isScreenOn() 调用可用(并使 isInteractive() 调用不可用)。这可能是一种可能性,但似乎是一个糟糕的解决方法,因为我基本上会被困在这个 sdk 级别,直到框架向后移植这个功能或者 sdks 15 - 19 被足够少的用户使用,不再支持它们。
我对情况的评估是否正确?
任何人都可以评论提出的两种解决方法或建议替代方案吗?