2013-08-07 5 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

여기 – Opiatefuchs

+0

확인 귀하의 AppwidgetProvider.xml을 보여하지만 난 업데이트에 대한 최소 시간은 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 나는 내 세부 사항을 업데이트했습니다. –

+0

도 똑같은 일을합니다. –