2013-08-07 5 views
0

Je travaille sur Android appwidget, Il ya des problèmes de mise à jour appwidget périodiquement. Modification de la période de mise à jour à plus de 30 minutes. Pas encore de mettre à jour le widgetappwidget ne pas se mettre à jour

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); 
    } 

} 

}

ceci est mon classe appwidget, je ne peux pas suivre pourquoi la mise à jour isnt après android:updatePeriodMillis="50000"

merci à l'avance ..

+0

s'il vous plaît montrer votre AppwidgetProvider.xml – Opiatefuchs

+0

sûr, mais je pense que le temps minimum pour la mise à jour est de 30 minutes et là, je fais en 50 secondes – user2660060

+0

Répondre

0

minimum temps réel pour la mise à jour du widget est de 30 minutes pour éviter les mauvais widgets programmés pour sécher la batterie. Pour une mise à jour fréquente du widget, utilisez AlarmManager pour surmonter cela.

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 
+0

et où devrais-je faire ce genre de choses – user2660060

+0

@ user2660060 J'ai mis à jour mes ans.it a le détail complet –

+0

cela marchera je fais aussi la même chose –