Jag har en app som periodiskt går ut och hämtar data från en websida för att uppdatera information i en widget. Användaren kan själv välja om detta skall ske en gång per dygn, en gång i timmen eller en gång i kvarten.
Problemet är att i Android 4.4.2 sker det inte så ofta som användaren vill utan ungefär var fjärde sekund!
Min kod för att skapa en PendingIntent ser ut på följande vis:
Kod:
149 switch(RefreshId)
150 {
151 case R.id.update_15m:
152 iRefreshTimeSeconds = 15*60;
153 lAlarmRepeat = AlarmManager.INTERVAL_FIFTEEN_MINUTES;
154 break;
155 case R.id.update_1h:
156 iRefreshTimeSeconds = 60*60;
157 lAlarmRepeat = AlarmManager.INTERVAL_HOUR;
158 break;
159 case R.id.update_1d:
160 iRefreshTimeSeconds = 24*60*60;
161 lAlarmRepeat = AlarmManager.INTERVAL_DAY;
162 break;
163 default:
164 iRefreshTimeSeconds = 0;
165 break;
166 }
167 AlarmManager alarmMgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
168 if(iRefreshTimeSeconds > 0)
169 {
170 Intent updateintent = new Intent("se.poolhem.telenorkontant.UPDATE_WEB");
171 pendingIntentTimer = PendingIntent.getBroadcast(context, 0, updateintent, 0);
172 alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), lAlarmRepeat, pendingIntentTimer);
173 }
(ber om ursäkt för radnummer och brist på indentering, det blev så vid copy-paste). Koden går även läsa i sin helhet i ett lite snyggare format på http://telenorkontant.cvs.sourcefor.../TelenorWidget.java?revision=1.24&view=markup
Min kod för att ta emot dessa PendingIntent ser ut på följande vis:
Kod:
61 public void onReceive(Context context, Intent intent) {
62 Log.d("TelenorKontant", "Entering onReceive...");
63 final String action = intent.getAction();
64
65 if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
66 final int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
67 if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
68 this.onDeleted(context, new int[] { appWidgetId });
69 }
70 }
71 else if(action.equals("se.poolhem.telenorkontant.UPDATE_WEB"))
72 {
73 updateSaldoFromWeb(context);
74 }
Denna kod hamnar alltså alldeles för ofta på rad 73 i Android 4.4.2.
Jag har sökt på nätet efter andra med liknande problem. Det verkar som om någonting har skett med denna typ av timers i Android 4.4, man måste använda setInexactRepeating i stället för som tidigare med tillgång även till setRepeating, men jag använder redan setInexactRepeating i min kod.
Finns det någon som har någon aning om hur jag skall undvika detta jätte-spammande av intents som kommer i Android 4.4.2?
m v h Henrik