2013-08-07 53 views
0

我在android appwidget上工作,有定期更新appwidget的問題。更新週期更改爲30分鐘以上。還沒更新部件appwidget沒有自行更新

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"

感謝後跟蹤爲什麼不是它更新..

+0

請出示你的AppwidgetProvider.xml – Opiatefuchs

+0

肯定,但我認爲對於更新的最短時間是30分鐘,我在這裏做它在50秒內 – user2660060

+0

回答

0

最低小部件更新的實際時間爲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 
+0

和我應該在哪裏做這個東西 – user2660060

+0

@ user2660060我已經更新我的ans.it有完整的細節 –

+0

它會工作我也在做同樣的事 –