ウィジェットを特定の時間(日付変更時)に自動更新させたいので,ウィジェット作成時にAlarmManagerのsetExactAndAllowWhileIdleを使用し,時間を指定して更新処理を行うよう実装しました。
ただ,問題がありまして,アプリが起動中あるいは最近使ったアプリに入っている時には処理は実行されるのですが,アプリが最近使ったアプリにも入っておらず一切起動していないときには(端末を起動して画面がONの状態でも)アラームが動作しないという問題が起こります。特にエラーも発生していません。
AlarmManagerはそもそも,そういうものなのでしょうか?
setExactAndAllowWhileIdleを使用すればアプリが起動していない際も処理が行われるのかと思っていたのですが,私の勘違いですか?
或いは,何かが不足しているのでしょうか?(Manifestで何かしらのパーミッションを設定する必要がある?)
以下に,アラーム設定部分のコードを記載します
kotlin
1 //日付が変わったタイミングでウィジェットをアップデートする 2 val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager 3 val midnight = Calendar.getInstance().apply { 4 set(Calendar.HOUR_OF_DAY, 0); 5 set(Calendar.MINUTE, 0); 6 set(Calendar.SECOND, 1); 7 set(Calendar.MILLISECOND, 0); 8 } 9 10 val updatePendingIntent= 11 Intent(context, TaskListWidget::class.java).apply { 12 action = TaskListWidget.UPDATE_ALL_WIDGET 13 }.let { intent -> 14 PendingIntent.getBroadcast( 15 context, 16 appWidgetId, 17 intent, 18 PendingIntent.FLAG_UPDATE_CURRENT 19 ) 20 } 21 22 alarmManager.setExactAndAllowWhileIdle( 23 AlarmManager.RTC, 24 midnight.timeInMillis, 25 updatePendingIntent 26 )
以下が,Manifestのレシーバーの部分になります
xml
1 2 <receiver android:name=".widget.TaskListWidget"> 3 <intent-filter> 4 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 5 </intent-filter> 6 7 <meta-data 8 android:name="android.appwidget.provider" 9 android:resource="@xml/task_list_widget_info" /> 10 </receiver> 11
あなたの回答
tips
プレビュー