Android : Alarm for update more widget

自作多情 提交于 2019-12-25 00:53:53

问题


I use an AlarmManager for update every second a widget but when add more widget only the last widget is updated. I don't understend why...

This is the code...

public class widget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
        SharedPreferences preference = context.getSharedPreferences("MY_PREFERENCE", Context.MODE_PRIVATE);
        Intent intent = new Intent(context,vampireServiceWidget.class);
        context.startService(intent);
        for(int i=0; i<appWidgetIds.length;i++){        
            if(preference.getLong("countdown", 0)!=0){
                //Parte il countdown
                Intent in = new Intent().setAction("it.android.dev.thevampirediaries.UPDATE_COUNTDOWN");
                in.putExtra("id_widget", appWidgetIds[i]);
                in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                PendingIntent pi = PendingIntent.getBroadcast(context, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);
                AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
                alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 1000, pi); 

                    }       }

}

into the broadcast this code

    AppWidgetManager manager = AppWidgetManager.getInstance(context);
            RemoteViews remoteView = new RemoteViews(context.getPackageName(),R.layout.widgett);
         thisWidget=intent.getIntExtra("id_widget", 0)
            SimpleTimeFormat tf = new SimpleTimeFormat("$dd$ : $HH$: $mm$: $ss$");    
            String risultato = tf.format(countdown_data_fine - new Date().getTime()); // arg0 tempo
            remoteView.setTextViewText(R.id.textView1, titolo_puntata);
            remoteView.setTextViewText(R.id.textView2, risultato);
            manager.updateAppWidget(thisWidget, remoteView);

回答1:


Comment out the for loop and do not send the widget ids. Use public void updateAppWidget (ComponentName provider, RemoteViews views) to update the widget.

Try this

public class widget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
        SharedPreferences preference = context.getSharedPreferences("MY_PREFERENCE", Context.MODE_PRIVATE);
        Intent intent = new Intent(context,vampireServiceWidget.class);
        context.startService(intent);
        //for(int i=0; i<appWidgetIds.length;i++){        
            if(preference.getLong("countdown", 0)!=0){
                //Parte il countdown
                Intent in = new   Intent().setAction("it.android.dev.thevampirediaries.UPDATE_COUNTDOWN");
                in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                PendingIntent pi = PendingIntent.getBroadcast(context, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);
                AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
                alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 1000, pi); 

             }     
       }

// }

================================================

    AppWidgetManager manager = AppWidgetManager.getInstance(context);
                RemoteViews remoteView = new RemoteViews(context.getPackageName(),R.layout.widgett);
ComponentName thisWidget = new ComponentName(context, widget.class);
    SimpleTimeFormat tf = new SimpleTimeFormat("$dd$ : $HH$: $mm$: $ss$");    
                String risultato = tf.format(countdown_data_fine - new Date().getTime());
                remoteView.setTextViewText(R.id.textView1, titolo_puntata);
                remoteView.setTextViewText(R.id.textView2, risultato);
                manager.updateAppWidget(thisWidget, remoteView);


来源:https://stackoverflow.com/questions/10264399/android-alarm-for-update-more-widget

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!