【发布时间】:2020-10-03 09:21:09
【问题描述】:
我在使用小部件时遇到了问题,需要您的帮助。 我想在 1 分钟内更新小部件。我使用的方式是使用警报管理器设置一个计时器来启动一个更新小部件的服务。但是它在后台不起作用,只有在 mainactivity 处于活动状态时才起作用。
以下是我的代码。
myWidgetProvider:
private static final int UPDATE_DURATION = 60 * 1000;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime(),UPDATE_DURATION,createPendingIntent(context));
final int N = appWidgetIds.length;
for (int i=0; i<N; i++){
int appWidgetId = appWidgetIds[i];
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.quotes_layout);
views.setTextColor(R.id.quotes_textview,Color.WHITE);
appWidgetManager.updateAppWidget(appWidgetId,views);
}
}
private PendingIntent createPendingIntent(Context context){
Intent alarmIntent = new Intent(context,TimerService.class);
PendingIntent pendingIntent = PendingIntent.getService(context,0,alarmIntent,PendingIntent.FLAG_UPDATE_CURRENT);
return pendingIntent;
}
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
manager.cancel(createPendingIntent(context));
}
我的服务:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//Internet request and update widgets
return super.onStartCommand(intent, flags, startId);
}
【问题讨论】:
标签: android service widget android-widget alarmmanager