无法使用Alarm Manager和PendingIntent启动Widget更新

时间:2011-05-27 17:51:37

标签: android android-widget alarmmanager

我正在尝试几天来解决这个问题,希望有人能帮助我。

我正在使用警报管理器让我的小部件更新我想要的时间(如果在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>

2 个答案:

答案 0 :(得分:0)

但你的alarmManager.setRepeating()行被注释掉了......

答案 1 :(得分:0)

首先,您还应该在意图中指定您的班级。

updateIntent.setClass(context, YourProviderClassName.class);

然后它是PendingIntent的主题。有一个PendingIntent过滤器在后台工作,不允许将两个类似的Intent设置为pending。因此,当它被调用时,如果存在类似的意图,它将被忽略。

如果您的appwidget提供商信息中的 updatePeriodMillis 的值设置为零,则系统已设置PendingIntent进行更新。这就是为什么你的新PendingIntent无效

解决方案是禁用updatePeriodMillis并改为使用AlarmManager。 AlarmManager类有一些方法可以帮助您按照自己的方式设置PendingIntents。但请记住,你一次只能拥有一个PendingIntent。