我正在尝试几天来解决这个问题,希望有人能帮助我。
我正在使用警报管理器让我的小部件更新我想要的时间(如果在30分钟内仅起诉XML一次),所以我做了一个待定的意图,并在我发现的示例中编写它,但仅更新一旦我编译程序。
这是mu代码:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
android.util.Log.w("FullTankWidget.UpdateService", "onUpdate()");
Intent updateIntent = new Intent("android.appwidget.action.APPWIDGET_UPDATE");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, updateIntent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
// alarmManager.setRepeating(AlarmManager.RTC, nextMinute.getTimeInMillis(),60000,pendingIntent);
long firstTime = SystemClock.elapsedRealtime();
alarmManager.set(AlarmManager.RTC, firstTime + (60 * 1000), pendingIntent);
android.util.Log.w("FullTankWidget.UpdateService", String.valueOf(firstTime));
// To prevent any ANR timeouts, we perform the update in a service
context.startService(new Intent(context,WidgetUpdateService.class));
意图过滤器在清单 - defoult小部件接收器中写入
<receiver android:name=".FullTankWidget" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/fulltank_widget_config" />
</receiver>
答案 0 :(得分:0)
但你的alarmManager.setRepeating()行被注释掉了......
答案 1 :(得分:0)
首先,您还应该在意图中指定您的班级。
updateIntent.setClass(context, YourProviderClassName.class);
然后它是PendingIntent的主题。有一个PendingIntent过滤器在后台工作,不允许将两个类似的Intent设置为pending。因此,当它被调用时,如果存在类似的意图,它将被忽略。
如果您的appwidget提供商信息中的 updatePeriodMillis 的值设置为零,则系统已设置PendingIntent进行更新。这就是为什么你的新PendingIntent无效。
解决方案是禁用updatePeriodMillis并改为使用AlarmManager。 AlarmManager类有一些方法可以帮助您按照自己的方式设置PendingIntents。但请记住,你一次只能拥有一个PendingIntent。