自作ウィジェットを作っております。1秒おきにカウントダウンをしたいのでAppWidgetProvider内でAlarmManager#setRepeatingを呼び出し更新させています。テスト環境はNexus 5X Android 6.0です。以下コードになります。
AppWidgetProvider
public class MyWidget extends AppWidgetProvider { public static final String IMAGE_CLICKED = "ImageClicked"; public static final String COUNTDOWN_OPERATION = "CountdownOperation"; public static boolean DOES_RUN_COUNTDOWN; public static final String UPDATE_TIMETABLE_OPERATION = "UpdateTimeTableOperation"; private final int INTERVAL_COUNTDOWN = 1000; private final int INTERVAL_UPDATE_TIMETABLE = 1000 * 60 * 10; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { DOES_RUN_COUNTDOWN = false; RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.bustimetable_widget); ComponentName watchWidget = new ComponentName(context, BusTimetableWidget.class); remoteViews.setOnClickPendingIntent( R.id.imageView_bus, getPendingIntentBroadcast(context, IMAGE_CLICKED) ); appWidgetManager.updateAppWidget(watchWidget, remoteViews); } @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.bustimetable_widget); ComponentName watchWidget = new ComponentName(context, BusTimetableWidget.class); if(intent.getAction().equals(IMAGE_CLICKED)){ if(DOES_RUN_COUNTDOWN){ DOES_RUN_COUNTDOWN = false; Toast.makeText(context, "IMAGE_CLICKED: " + DOES_RUN_COUNTDOWN, Toast.LENGTH_LONG).show(); cancelCountdownAlarm(context); } else { DOES_RUN_COUNTDOWN = true; Toast.makeText(context, "IMAGE_CLICKED: " + DOES_RUN_COUNTDOWN, Toast.LENGTH_LONG).show(); setCountdownAlarm(context); } } else if(intent.getAction().equals(UPDATE_TIMETABLE_OPERATION)){ Toast.makeText(context, "UPDATE_TIMETABLE_OPERATION: " + Calendar.getInstance().getTime(), Toast.LENGTH_LONG).show(); } else if(intent.getAction().equals(COUNTDOWN_OPERATION)){ remoteViews.setTextViewText(R.id.textView_fore_count, "n: " + count++); // Toast.makeText(context, "COUNTDOWN_OPERATION: " + Calendar.getInstance().getTime(), Toast.LENGTH_SHORT).show(); } appWidgetManager.updateAppWidget(watchWidget, remoteViews); super.onReceive(context, intent); } private void setCountdownAlarm(Context context) { PendingIntent operation = getPendingIntentService(context, COUNTDOWN_OPERATION); AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); long firstTime = System.currentTimeMillis() + 1000 * 3; alarmManager.setRepeating(AlarmManager.RTC, firstTime, INTERVAL_COUNTDOWN, operation); } private void cancelCountdownAlarm(Context context){ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); PendingIntent operation = getPendingIntentService(context, COUNTDOWN_OPERATION); alarmManager.cancel(operation); } protected PendingIntent getPendingIntentService(Context context, String action) { Intent intent = new Intent(context, getClass()); intent.setAction(action); return PendingIntent.getService(context, 0, intent, 0); } }
widget_info.xml
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialKeyguardLayout="@layout/bustimetable_widget" android:initialLayout="@layout/bustimetable_widget" android:minHeight="40dp" android:minWidth="40dp" android:previewImage="@drawable/bus_image" android:resizeMode="horizontal|vertical" android:updatePeriodMillis="0" android:widgetCategory="home_screen"/>
Manifest
<intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="CountdownOperation" /> <action android:name="UpdateTimeTableOperation" /> <action android:name="ImageClicked"/> </intent-filter>
ImageViewのクリックに応じてカウントダウンをスタート、キャンセルする形を取っています。
現状、ImageViewのクリックには即時反応するのですが、カウントダウンは更新が呼ばれていません。おそらくAlarmManagerの使い方が間違っているのではないかと思うのですが、ご指南よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/09 16:00
2015/12/09 16:58 編集
2015/12/12 20:11
2015/12/13 04:41