Невозможно запустить обновление виджета с помощью диспетчера тревог и PendingIntent - PullRequest
0 голосов
/ 27 мая 2011

Я пару дней пытаюсь решить эту проблему, надеюсь, кто-нибудь может мне помочь.

Я использую Alarm Manager, чтобы обновлять мой виджет в нужное время (если подавать в суд на XML только один раз в 30 минут), поэтому я сделал отложенное намерение и написал его, как в примерах, которые я нашел, но только его обновления однажды, когда я скомпилирую программу.

Вот код му:

@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 голосов
/ 17 декабря 2013

Прежде всего, вы также должны указать свой класс в Intent.

updateIntent.setClass(context, YourProviderClassName.class);

Тогда это предмет PendingIntent.Существует фильтр PendingIntent, работающий на фоне, который не позволяет двум подобным Intents быть установленными как ожидающие.Поэтому, когда он вызывается, он будет игнорироваться, если для него есть аналогичное намерение.

Если в информации о вашем поставщике appwidget установлено значение updatePeriodMillis , отличное от нуля,Система уже установила PendingIntent для обновления.Вот почему ваш новый PendingIntent не будет работать .

Решение состоит в том, чтобы отключить updatePeriodMillis и использовать вместо него AlarmManager.Класс AlarmManager имеет методы, которые помогут вам установить PendingIntents так, как вы хотите.Но помните, что у вас по-прежнему будет только один PendingIntent за раз.

0 голосов
/ 28 мая 2011

Но ваша строка alarmManager.setRepeating () закомментирована ...

...