위젯이 있으므로 60 초마다 업데이트하고 싶습니다. 위젯이 홈 화면에 처음 추가되면 업데이트 기능이 제대로 실행됩니다. 그 이상으로 AlarmManager를 시작해야하는데, 60 초마다 update 메소드가 다시 실행됩니다. 그것이 실제로하는 것처럼 보이지 않는 부분입니다.AppWidget alarmmanager가 업데이트되지 않습니다.
public class ClockWidget extends AppWidgetProvider {
public static String CLOCK_WIDGET_UPDATE = "com.nickavv.cleanwidget.CLEANCLOCK_UPDATE";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int appWidgetIds[]) {
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.clocklayout);
appWidgetManager.updateAppWidget(appWidgetId, views);
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}
public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
Log.d("log","Entered update cycle");
//Unimportant for these purposes
appWidgetManager.updateAppWidget(appWidgetId, views);
}
private PendingIntent createClockTickIntent(Context context) {
Intent intent = new Intent(CLOCK_WIDGET_UPDATE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
return pendingIntent;
}
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
Log.d("onEnabled","Widget Provider enabled. Starting timer to update widget every minute");
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 60000, createClockTickIntent(context));
}
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
Log.d("onDisabled", "Widget Provider disabled. Turning off timer");
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(createClockTickIntent(context));
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
Log.d("onReceive", "Received intent " + intent);
if (CLOCK_WIDGET_UPDATE.equals(intent.getAction())) {
Log.d("onReceive", "Clock update");
// Get the widget manager and ids for this widget provider, then
// call the shared
// clock update method.
ComponentName thisAppWidget = new ComponentName(context.getPackageName(), getClass().getName());
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int ids[] = appWidgetManager.getAppWidgetIds(thisAppWidget);
for (int appWidgetID: ids) {
updateAppWidget(context, appWidgetManager, appWidgetID);
}
}
}
}
그것은, 내가 문제에 발견 한 몇 가지 자습서의 제품 및 안드로이드 내 자신의 지식 : 여기에 내 코드입니다. Logcats에 따르면 Log.d ("onReceive", "Clock update")에 도달하지 않습니다. 선. 그리고 네, 내 매니페스트는 클럭 업데이트의 의도로 설정됩니다. 감사!
편집 : 추가 정보 createClockTickIntent 메소드에 로그 라인을 추가하고 실행합니다. 그래서 이것은 내 응용 프로그램이 alarmManager.setRepeating 행을 실행하고 있다는 것을 의미하며 실제로 반복되지 않는 이유는 알 수 없습니다.
맞춤법 오류를 수정하여 자신의 문제를 해결했지만이를 게시 해 주셔서 감사합니다. AlarmManager를 사용하여 어디에서나 볼 수있는 appwidget을 업데이트하는 방법을 가장 간결하고 간단하게 보여줍니다! 거기에 너무 많은 끔찍하게 복잡한 솔루션이 있지만,이 모든 것을 이해하고 구현하는 방법으로 간단합니다. 감사! – drmrbrewer