2017-08-16 75 views
1

我们的应用程序中有一个时钟小部件。 小部件需要每分钟更新一次以显示正确的时间。Android O:我们可以制作一个时钟小部件吗?

在Android的O,则建议使用的jobscheduler后台更新。 不幸的是,有一些限制。

  1. JobService的定期更新无法在少于15分钟的间隔内调用。
  2. JobService.onStartJob()是不可预知的。我们可能会错过更新分钟数的准确时刻(第59秒)。

以前我们曾经使用Handler.postDelayed()来运行后台服务来更新小部件中的时间。 在O后台服务可以由系统终止。

你会如何建议实施的AndroidØ时钟小工具?

现在这甚至可能吗?

enter image description here

+1

任何想法,为什么我的问题是downvoted? – Pavel

+0

尝试JobIntentService –

+2

这是一个非常重要的问题。它不应该downvoted –

回答

2

使用“TextClock”窗口小部件的控制,它是由远程视窗功能的支持,它通过它的自我更新的每一分钟,没有必要使用那些花哨的jobscheduler工作。

像这样的事情会做的伎俩:

<LinearLayout 
    android:id="@+id/root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextClock 
     android:id="@+id/dateText" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:format12Hour="@string/date_text_format_12h" 
     android:format24Hour="@string/date_text_format_24h" 
     android:gravity="bottom|center_horizontal" 
     android:textColor="@android:color/black" 
     android:textSize="@dimen/date_text_size_default"/> 

    <TextClock 
     android:id="@+id/timeText" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:format12Hour="@string/time_text_format_12h" 
     android:format24Hour="@string/time_text_format_24h" 
     android:gravity="top|center_horizontal" 
     android:textColor="@android:color/black" 
     android:textSize="@dimen/time_text_size_default" 
     android:textStyle="bold"/> 

</LinearLayout> 
+1

我并不期望解决方案如此简单。几周前我们甚至联系了Google开发者支持。他们仍然没有提供任何答案。非常感谢! – Pavel

+1

TextClock小部件仅适用于启动API 17. – Pavel

+0

此解决方案不适用于模拟时钟。有谁知道模拟时钟是否可以在Android Oreo中创建? –

0

这是一个小部件;它不需要一直更新 - 只有当它可见时才会更新。为什么你想在你的小部件没有运行的时候浪费电池来跟踪当前时间?

当小部件变为可见,查找当前时间和绘制的时候了。另外,计算下一分钟的顶部时间,并将延迟消息或Runnable发布到将在此刻触发的处理程序。当该消息/ Runnable执行时,更新您的时间显示并在下一分钟的顶部重新发布消息/ Runnable。

你也应该注册,当当前时间改变时,报警管理送出Intent.ACTION_TIME_CHANGED广播接收机;您需要重新计算您的显示时间以及下次更新何时响应该广播。

+1

那么,什么事件触发时,小部件变得可见? –

+2

据我所知,没有办法检测小部件变得可见的时刻。 – Pavel

相关问题