Pre API 19, il metodo go-to per l'aggiornamento di un widget più veloce del tempo updatePeriodMillis
minimo di 30 minuti consisteva nell'utilizzare uno AlarmManager
e un BroadcastReceiver
per ricevere l'intenzione dopo la specifica intervallo utilizzato durante l'impostazione di AlarmManager.Aggiornamento di un widget a intervalli brevi utilizzando l'API 19+
Attualmente, utilizzando il codice riportato di seguito, il widget viene aggiornato, ma a partire da Android 5.1, utilizzando .setRepeating() con un intervallo di ripetizione inferiore a 60000ms avrà automaticamente l'intervallo impostato su almeno 60000 ms.
Impostazione allarme in Widget onEnabled():
AlarmManager am= (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
//After after 3 seconds
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+ 3000, 1000 , pi);
poi nel del AlarmManagerBroadcastReceiver OnReceive():
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG");
//Acquire the lock
wl.acquire();
/*
* ......
* Update Widgets RemoteViews
*/
wl.release();
nella documentazione per setRepeating() che dice:
Nota: a partire dall'API 19, tutti gli allarmi ripetuti sono inesatti. Se l'applicazione richiede tempi di consegna precisi, è necessario utilizzare allarmi esatti e una sola volta, riprogrammando ogni volta come descritto sopra. Le applicazioni legacy con targetSdkVersion precedente all'API 19 continueranno ad avere tutti i loro allarmi, compresi gli allarmi ripetuti, trattati come esatti.
anche ora afferma:
Schedule un allarme di ripetizione. Nota: per le operazioni di cronometraggio (zecche, timeout, ecc) è più facile e molto più efficiente di utilizzare
Handler
Così come si va sulla aggiornamento delle Widgets Remoteviews utilizzando un gestore? Come faresti a smettere quando il dispositivo viene messo a dormire per risparmiare la batteria?
Esistono altri modi consigliati per aggiornare un widget?
c'è qualche problema con la mia risposta? l'hai provato ? – csenga