2

I am looking at creating a clock widget that tell the current time but if the minimum time you can set for the widget is 15 minutes thats obviously not going to work.

I also see suggestions on using AlarmManager but then I worry about the battery life.

I also see the intent action Intent.ACTION_TIME_TICK that fires every minute and seems like what I want but as the documentation says

You cannot receive this through components declared in manifests, only by explicitly registering

So that seems like its not going to work for a widget

So the question is, is there a "correct" way to build a clock widget that does not kill the battery and still updates the current time?

tyczj
  • 71,600
  • 54
  • 194
  • 296

2 Answers2

4

If you are talking about a Digital clock , Android added a TextClock layout widget on API level 17 . you can simply add it to your widget XML and it will automatically show the time. Example:

        <android.widget.TextClock
        android:id="@+id/clock"
        android:format24Hour="k:mm"
        android:format12Hour="k:mm"
        android:gravity="center" />

I actually just made (this week) an open source android digital clock widget , feel free to browse and use my code. pull requests will be much appreciated! I'm sure it will be helpful to you since I stumbled a bunch of surprising walls on the way. https://github.com/y0av/MaterialClockWidget

if you want anything other then a digital clock you will need to use an AlarmManager like you mentioned.

Joe
  • 2,252
  • 1
  • 22
  • 32
  • That is not one of the supported view widgets that you can put in a home screen widget. https://developer.android.com/guide/topics/appwidgets#CreatingLayout – tyczj Jun 08 '20 at 12:59
  • @tyczj well it sure works. tested on multiple devices and launchers. – Joe Jun 08 '20 at 13:54
  • hmm interesting, I will give it a try then – tyczj Jun 08 '20 at 15:16
  • 1
    @Joe your widget looks great. It's surprisingly difficult to find decent android stuff without ads, tracking, etc. I would suggest to publish it to F-Droid so that it's easier to find for people who are looking for open source stuff. A thing I'm missing is for it to open the clock app on tap, and maybe showing next alarm and better handling of denying file access (as that breaks it completely). I will try to make a PR for that when I get the time. – Qtax Apr 06 '21 at 20:28
0

Make it tick only when the user is watching. So in onResume make it to current time and update it every minute or something, then in onPause stop updating it and kill the timer,handle,rxInterval or whatever you are using to update the view periodically.

Goodie123
  • 467
  • 4
  • 16
  • There is no onPause/onResume for a widget, tying a widget to an activity does not make sense because then the widget on the home screen will only update if the user opened the app so its not going to show the correct time – tyczj Jun 07 '20 at 20:03