如何在后台使用服务更新android小部件
我在小部件方面有困难,我需要你的帮助。 我想在1分钟内更新小部件。我使用的方法是用alarmmanger设置一个计时器来启动更新小部件的服务。但它在后台不起作用,只有在mainactivity处于活动状态时才起作用 下面是我的代码 myWidgetProvider:如何在后台使用服务更新android小部件,android,service,widget,android-widget,alarmmanager,Android,Service,Widget,Android Widget,Alarmmanager,我在小部件方面有困难,我需要你的帮助。 我想在1分钟内更新小部件。我使用的方法是用alarmmanger设置一个计时器来启动更新小部件的服务。但它在后台不起作用,只有在mainactivity处于活动状态时才起作用 下面是我的代码 myWidgetProvider: private static final int UPDATE_DURATION = 60 * 1000; @Override public void onUpdate(Context context, AppWidgetMan
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);
}
使用上面的代码从服务中更新文本,您可以执行其他操作,如在textview中设置文本的颜色。或者控制它的可见性
而不是后台服务,你可以使用服务或,两者都可以工作,即使主活动被破坏。但JobService对android 9+的优化程度更高。更好的解决方案:p。
@Override
public void onCreate() {
super.onCreate();
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.app_widget);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
remoteView.setTextViewText(R.id.coffee_quote, getRandomQuote(context)) //changing text...
ComponentName thisWidget = new ComponentName(context, MyWidgetProvider.class);
appWidgetManager.updateAppWidget(thisWidget, remoteView);
}