1

我正在为 Android 制作一个动画时钟小部件,我想通过在时钟不可见时停止它来优化刷新过程。

为此,我想检查用户是在主屏幕上还是在应用程序内。如果可能,我还需要接收“返回主屏幕”事件。我不知道该怎么做。

现在,我正在一个粘性服务中运行我的小部件,并且我已经实现了一个“屏幕开/关”接收器。

4

2 回答 2

0

您可以使用ActivityManager获取正在运行的任务列表,然后检查最近的任务属于哪个包。然而:

  1. 谷歌在他们自己的文档中对此提出警告
  2. 这将要求您android.permission.GET_TASKS在清单中声明权限,我相信潜在用户会觉得时钟小部件想知道正在运行的任务很奇怪。

假设您这样做了,那么您可以通过检查该包中的任何内容是否可以以Intent这种方式解析定义的内容来判断它是否是 Launcher 应用程序:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);

在不使用 ActivityManager 的情况下,我不知道有什么方法可以在任何给定时刻辨别哪个应用程序在用户面前。在您自己的应用程序之外,也无法知道Activity该应用程序在任何给定时刻呈现在用户面前的内容。

Optionnaly,我想对不同的主屏幕做同样的事情:仅当用户进入包含小部件的屏幕时才刷新时钟

值得一提的是,Launcher 应用程序可能没有为单个主屏幕使用单独的活动(事实上,我检查过的所有启动器都没有这样做)。即使它确实使用了单独的活动,您也不知道您的小部件在哪个屏幕上,除非该应用程序以某种方式向您公开了该信息(极不可能)。

总的来说,我会说你有很多工作需要优化你的时钟小部件。充其量你可能能够分辨出哪个应用程序在用户面前以及它是否是启动器。

于 2013-05-07T23:00:17.023 回答
0

您应该覆盖活动的onPause( ) 和onResume()方法。希望这可以帮助。

于 2013-05-07T22:20:08.213 回答