AlarmManager on API19 has the method setExact() to set an exact alarm.
Exact means --> If I set an alarm to 2:01 p
I have found that so far the best option is to use a SyncAdapter that extends AbstractThreadedSyncAdapter. I schedule it to automatically keep running my code at the required interval:
ContentResolver.setSyncAutomatically(account, AUTHORITY, true);
ContentResolver.addPeriodicSync(account, AUTHORITY, settingsBundle, syncInterval);