appwidget не обновляется

Я работаю над виджетом приложения для Android. Периодически возникают проблемы с обновлением виджета приложения. Изменен период обновления на более чем 30 минут. Все еще не обновляется виджет

public class MyWidgetProvider extends AppWidgetProvider {

final static String ITEM_CLICK_ACTION = "ItemClick";
public static final String TOAST_ACTION = "TOAST_ACTION";

BroadcastReceiver receiver;

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];

        Log.e("called", "omupdate");

        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.widget_lay);

        views.setTextViewText(R.id.textView1,
                "Floating Text will be displayed here .. Daily Thoughts");

        Intent intent = new Intent(context, RemoteServiceEmin.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        // intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
        views.setRemoteAdapter(R.id.gridview, intent);

        // inflating list remote view

        Intent intentlist = new Intent(context, ListInflater.class);
        intentlist.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                appWidgetId);
        // intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
        views.setRemoteAdapter(R.id.listview, intentlist);

        // setting onclick on gridview
        Intent itemClickIntent = new Intent(context, MyWidgetProvider.class);
        itemClickIntent.setAction(ITEM_CLICK_ACTION);
        itemClickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                appWidgetIds[i]);
        PendingIntent itemClickPendingIntent = PendingIntent.getBroadcast(
                context, 0, itemClickIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        views.setPendingIntentTemplate(R.id.gridview,
                itemClickPendingIntent);

        Intent toastIntent = new Intent(context, MyWidgetProvider.class);
        toastIntent.setAction(MyWidgetProvider.TOAST_ACTION);
        toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                appWidgetIds[i]);
        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
        PendingIntent toastPendingIntent = PendingIntent.getBroadcast(
                context, 0, toastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        views.setPendingIntentTemplate(R.id.ll, toastPendingIntent);

        // appWidgetManager.updateAppWidget(appWidgetIds[i], v);
        // appWidgetManager.updateAppWidget(appWidgetIds[i], views);
        appWidgetManager.updateAppWidget(appWidgetId, views);

    }

    super.onUpdate(context, appWidgetManager, appWidgetIds);

}

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub

    if (intent.getAction().equals(ITEM_CLICK_ACTION)) {
        Bundle extras = new Bundle();
        extras.putString("text", intent.getExtras().getString("text"));
        Intent actIntent = new Intent();
        actIntent.setClass(context, ConfigurationActivity.class);
        actIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        actIntent.putExtras(extras);
        context.startActivity(actIntent);
    } else if (intent.getAction().equals(TOAST_ACTION)) {
        Toast.makeText(context, "dfjdsfl", Toast.LENGTH_SHORT).show();

    } else {
        super.onReceive(context, intent);
    }

}

}

это мой класс appwidget, я не могу отследить, почему он не обновляется после android:updatePeriodMillis="50000"

заранее спасибо ..


person user2660060    schedule 07.08.2013    source источник
comment
пожалуйста, покажите свой AppwidgetProvider.xml   -  person Opiatefuchs    schedule 07.08.2013
comment
конечно, но я думаю, что минимальное время для обновления составляет 30 минут, а здесь я делаю это за 50 секунд   -  person user2660060    schedule 07.08.2013
comment
‹appwidget-provider xmlns:android=schemas.android.com/apk/res/android android:initialLayout=@layout/widget_lay android:minHeight=200dp android:minWidth=200dp android:previewImage=@drawable/logo android:resizeMode=horizontal|vertical android:updatePeriodMillis=30000 › ‹/appwidget-provider›   -  person user2660060    schedule 07.08.2013
comment
если да, то вы можете использовать Broadcast Receiver.   -  person surhidamatya    schedule 07.08.2013


Ответы (1)


минимальное фактическое время обновления виджета составляет 30 минут, чтобы избежать разрядки батареи плохо запрограммированных виджетов. Для частого обновления виджета используйте AlarmManager.

  public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds){

     long interval = 50000;
    Intent in = new Intent(context, Widgetclass.class);
in.setAction("Widgetupdate");
    PendingIntent pi = PendingIntent.getService(context, 0, in, 0);

    AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);


        alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),interval, pi);
//add remaining code here
}
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("widgetupdate")) {
watchWidget = new ComponentName(context,
            Widgetclass.class);
 RemoteViews views = new RemoteViews(context.getPackageName(),
            R.layout.widget_lay);
(AppWidgetManager.getInstance(context)).updateAppWidget(
                    watchWidget, views);
}
declare this  receiver action in menifest file
person Shakeeb Ayaz    schedule 07.08.2013
comment
и где я должен делать это - person user2660060; 07.08.2013
comment
Спасибо @ user123, но есть еще одна проблема, см. следующий ответ. пожалуйста, дайте мне знать, если у вас есть решение для этого тоже - person user2660060; 08.08.2013