I have a piece of code, which schedules task to repeat every 10 (3,5,20,60, doesn't matter) seconds with this classes:
AlarmManager + BroadcastReceiver + IntentService
On SDK Emulator (4.2.2) it works fine
07-12 09:02:32.257: INFO/Alarm Receiver(1827): Entered
07-12 09:02:42.256: INFO/Alarm Receiver(1827): Entered
07-12 09:02:52.275: INFO/Alarm Receiver(1827): Entered
But on my phone Xiaomi MI-2S (4.1.1)
it fires only every 5 minutes
07-12 16:06:07.044: INFO/Alarm Receiver(5632): Entered
07-12 16:11:06.874: INFO/Alarm Receiver(5632): Entered
07-12 16:16:06.864: INFO/Alarm Receiver(5632): Entered
What's the problem?
upd. here's the code
Activity
public void startSchedule
{
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), MyReceiver.class);
final PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10*1000, pIntent);
}
public void endSchedule
{
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), MyReceiver.class);
final PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pIntent);
}
BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
{
Log.i("Alarm Receiver", "Entered");
context.startService(inService);
}
IntentService empty for now
@Override
protected void onHandleIntent(Intent arg0)
{
// Do some task
}
It's a bug of Xiaomi's v5 firmware! I've found a workaround to make my app work, but I think there will be problems with waking up. I use
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 5 * 1000, pendingIntent);
instead of
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 5 * 1000, pendingIntent);