AlarmManager.java revision e0a22b324d0e3157e570ea5f71cc682fa9696e01
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.app; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tateimport android.content.Context; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 21e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tateimport android.os.Build; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This class provides access to the system alarm services. These allow you 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to schedule your application to be run at some point in the future. When 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an alarm goes off, the {@link Intent} that had been registered for it 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is broadcast by the system, automatically starting the target application 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if it is not already running. Registered alarms are retained while the 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * device is asleep (and can optionally wake the device up if they go off 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * during that time), but will be cleared if it is turned off and rebooted. 32a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate * 33a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate * <p>The Alarm Manager holds a CPU wake lock as long as the alarm receiver's 34a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate * onReceive() method is executing. This guarantees that the phone will not sleep 35a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate * until you have finished handling the broadcast. Once onReceive() returns, the 36a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate * Alarm Manager releases this wake lock. This means that the phone will in some 37a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate * cases sleep as soon as your onReceive() method completes. If your alarm receiver 38a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate * called {@link android.content.Context#startService Context.startService()}, it 39a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate * is possible that the phone will sleep before the requested service is launched. 40a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate * To prevent this, your BroadcastReceiver and Service will need to implement a 41a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate * separate wake lock policy to ensure that the phone continues running until the 42a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate * service becomes available. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><b>Note: The Alarm Manager is intended for cases where you want to have 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * your application code run at a specific time, even if your application is 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not currently running. For normal timing operations (ticks, timeouts, 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * etc) it is easier and much more efficient to use 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.os.Handler}.</b> 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You do not 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instantiate this class directly; instead, retrieve it through 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Context#getSystemService 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Context.getSystemService(Context.ALARM_SERVICE)}. 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class AlarmManager 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 57e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate private static final String TAG = "AlarmManager"; 58e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Alarm time in {@link System#currentTimeMillis System.currentTimeMillis()} 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (wall clock time in UTC), which will wake up the device when 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it goes off. 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RTC_WAKEUP = 0; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Alarm time in {@link System#currentTimeMillis System.currentTimeMillis()} 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (wall clock time in UTC). This alarm does not wake the 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * device up; if it goes off while the device is asleep, it will not be 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * delivered until the next time the device wakes up. 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RTC = 1; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Alarm time in {@link android.os.SystemClock#elapsedRealtime 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SystemClock.elapsedRealtime()} (time since boot, including sleep), 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which will wake up the device when it goes off. 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ELAPSED_REALTIME_WAKEUP = 2; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Alarm time in {@link android.os.SystemClock#elapsedRealtime 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SystemClock.elapsedRealtime()} (time since boot, including sleep). 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This alarm does not wake the device up; if it goes off while the device 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is asleep, it will not be delivered until the next time the device 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * wakes up. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ELAPSED_REALTIME = 3; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final IAlarmManager mService; 88e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate private final boolean mAlwaysExact; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * package private on purpose 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 93e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate AlarmManager(IAlarmManager service, Context ctx) { 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService = service; 95e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate 96e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate final int sdkVersion = ctx.getApplicationInfo().targetSdkVersion; 97e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate mAlwaysExact = (sdkVersion < Build.VERSION_CODES.KEY_LIME_PIE); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Schedule an alarm. <b>Note: for timing operations (ticks, timeouts, 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * etc) it is easier and much more efficient to use 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.os.Handler}.</b> If there is already an alarm scheduled 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for the same IntentSender, it will first be canceled. 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If the time occurs in the past, the alarm will be triggered 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * immediately. If there is already an alarm for this Intent 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * scheduled (with the equality of two intents being defined by 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Intent#filterEquals}), then it will be removed and replaced by 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this one. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The alarm is an intent broadcast that goes to a broadcast receiver that 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you registered with {@link android.content.Context#registerReceiver} 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or through the <receiver> tag in an AndroidManifest.xml file. 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Alarm intents are delivered with a data extra of type int called 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Intent#EXTRA_ALARM_COUNT Intent.EXTRA_ALARM_COUNT} that indicates 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * how many past alarm events have been accumulated into this intent 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * broadcast. Recurring alarms that have gone undelivered because the 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * phone was asleep may have a count greater than one when delivered. 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC or 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * RTC_WAKEUP. 12679074cd935854b497cb894046da13bb08a113982Jesse Wilson * @param triggerAtMillis time in milliseconds that the alarm should go 12779074cd935854b497cb894046da13bb08a113982Jesse Wilson * off, using the appropriate clock (depending on the alarm type). 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param operation Action to perform when the alarm goes off; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * typically comes from {@link PendingIntent#getBroadcast 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * IntentSender.getBroadcast()}. 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.os.Handler 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setRepeating 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #cancel 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.content.Context#sendBroadcast 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.content.Context#registerReceiver 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.content.Intent#filterEquals 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #ELAPSED_REALTIME 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #ELAPSED_REALTIME_WAKEUP 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RTC 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RTC_WAKEUP 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14379074cd935854b497cb894046da13bb08a113982Jesse Wilson public void set(int type, long triggerAtMillis, PendingIntent operation) { 144e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate setImpl(type, triggerAtMillis, 0, operation, mAlwaysExact); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Schedule a repeating alarm. <b>Note: for timing operations (ticks, 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * timeouts, etc) it is easier and much more efficient to use 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.os.Handler}.</b> If there is already an alarm scheduled 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for the same IntentSender, it will first be canceled. 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Like {@link #set}, except you can also 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supply a rate at which the alarm will repeat. This alarm continues 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * repeating until explicitly removed with {@link #cancel}. If the time 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * occurs in the past, the alarm will be triggered immediately, with an 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * alarm count depending on how far in the past the trigger time is relative 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the repeat interval. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If an alarm is delayed (by system sleep, for example, for non 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * _WAKEUP alarm types), a skipped repeat will be delivered as soon as 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * possible. After that, future alarms will be delivered according to the 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * original schedule; they do not drift over time. For example, if you have 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set a recurring alarm for the top of every hour but the phone was asleep 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from 7:45 until 8:45, an alarm will be sent as soon as the phone awakens, 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * then the next alarm will be sent at 9:00. 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If your application wants to allow the delivery times to drift in 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * order to guarantee that at least a certain time interval always elapses 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between alarms, then the approach to take is to use one-time alarms, 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * scheduling the next one yourself when handling each alarm delivery. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP}, RTC or 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * RTC_WAKEUP. 17579074cd935854b497cb894046da13bb08a113982Jesse Wilson * @param triggerAtMillis time in milliseconds that the alarm should first 17679074cd935854b497cb894046da13bb08a113982Jesse Wilson * go off, using the appropriate clock (depending on the alarm type). 17779074cd935854b497cb894046da13bb08a113982Jesse Wilson * @param intervalMillis interval in milliseconds between subsequent repeats 17879074cd935854b497cb894046da13bb08a113982Jesse Wilson * of the alarm. 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param operation Action to perform when the alarm goes off; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * typically comes from {@link PendingIntent#getBroadcast 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * IntentSender.getBroadcast()}. 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.os.Handler 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #set 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #cancel 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.content.Context#sendBroadcast 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.content.Context#registerReceiver 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.content.Intent#filterEquals 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #ELAPSED_REALTIME 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #ELAPSED_REALTIME_WAKEUP 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RTC 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RTC_WAKEUP 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19479074cd935854b497cb894046da13bb08a113982Jesse Wilson public void setRepeating(int type, long triggerAtMillis, 19579074cd935854b497cb894046da13bb08a113982Jesse Wilson long intervalMillis, PendingIntent operation) { 196e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate setImpl(type, triggerAtMillis, intervalMillis, operation, mAlwaysExact); 197e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate } 198e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate 199e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate /** 200e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * TBW: new 'exact' alarm that must be delivered as nearly as possible 201e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * to the precise time specified. 202e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate */ 203e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate public void setExact(int type, long triggerAtMillis, PendingIntent operation) { 204e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate setImpl(type, triggerAtMillis, 0, operation, true); 205e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate } 206e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate 207e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate private void setImpl(int type, long triggerAtMillis, long intervalMillis, 208e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate PendingIntent operation, boolean isExact) { 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 210e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate mService.set(type, triggerAtMillis, intervalMillis, operation, isExact); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 216e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * @deprecated setInexactRepeating() is deprecated; as of API 19 all 217e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * repeating alarms are inexact. 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 219e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate @Deprecated 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final long INTERVAL_FIFTEEN_MINUTES = 15 * 60 * 1000; 221e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate 222e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate /** 223e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * @deprecated setInexactRepeating() is deprecated; as of API 19 all 224e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * repeating alarms are inexact. 225e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate */ 226e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate @Deprecated 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final long INTERVAL_HALF_HOUR = 2*INTERVAL_FIFTEEN_MINUTES; 228e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate 229e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate /** 230e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * @deprecated setInexactRepeating() is deprecated; as of API 19 all 231e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * repeating alarms are inexact. 232e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate */ 233e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate @Deprecated 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final long INTERVAL_HOUR = 2*INTERVAL_HALF_HOUR; 235e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate 236e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate /** 237e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * @deprecated setInexactRepeating() is deprecated; as of API 19 all 238e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * repeating alarms are inexact. 239e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate */ 240e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate @Deprecated 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final long INTERVAL_HALF_DAY = 12*INTERVAL_HOUR; 242e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate 243e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate /** 244e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * @deprecated setInexactRepeating() is deprecated; as of API 19 all 245e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * repeating alarms are inexact. 246e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate */ 247e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate @Deprecated 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final long INTERVAL_DAY = 2*INTERVAL_HALF_DAY; 249e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Schedule a repeating alarm that has inexact trigger time requirements; 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for example, an alarm that repeats every hour, but not necessarily at 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the top of every hour. These alarms are more power-efficient than 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the strict recurrences supplied by {@link #setRepeating}, since the 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system can adjust alarms' phase to cause them to fire simultaneously, 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * avoiding waking the device from sleep more than necessary. 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Your alarm's first trigger will not be before the requested time, 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but it might not occur for almost a full interval after that time. In 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * addition, while the overall period of the repeating alarm will be as 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * requested, the time between any two successive firings of the alarm 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may vary. If your application demands very low jitter, use 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setRepeating} instead. 26479074cd935854b497cb894046da13bb08a113982Jesse Wilson * 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP}, RTC or 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * RTC_WAKEUP. 26779074cd935854b497cb894046da13bb08a113982Jesse Wilson * @param triggerAtMillis time in milliseconds that the alarm should first 26879074cd935854b497cb894046da13bb08a113982Jesse Wilson * go off, using the appropriate clock (depending on the alarm type). This 26979074cd935854b497cb894046da13bb08a113982Jesse Wilson * is inexact: the alarm will not fire before this time, but there may be a 27079074cd935854b497cb894046da13bb08a113982Jesse Wilson * delay of almost an entire alarm interval before the first invocation of 27179074cd935854b497cb894046da13bb08a113982Jesse Wilson * the alarm. 27279074cd935854b497cb894046da13bb08a113982Jesse Wilson * @param intervalMillis interval in milliseconds between subsequent repeats 27379074cd935854b497cb894046da13bb08a113982Jesse Wilson * of the alarm. If this is one of INTERVAL_FIFTEEN_MINUTES, 27479074cd935854b497cb894046da13bb08a113982Jesse Wilson * INTERVAL_HALF_HOUR, INTERVAL_HOUR, INTERVAL_HALF_DAY, or INTERVAL_DAY 27579074cd935854b497cb894046da13bb08a113982Jesse Wilson * then the alarm will be phase-aligned with other alarms to reduce the 27679074cd935854b497cb894046da13bb08a113982Jesse Wilson * number of wakeups. Otherwise, the alarm will be set as though the 27779074cd935854b497cb894046da13bb08a113982Jesse Wilson * application had called {@link #setRepeating}. 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param operation Action to perform when the alarm goes off; 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * typically comes from {@link PendingIntent#getBroadcast 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * IntentSender.getBroadcast()}. 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 282e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * @deprecated As of API 19, all repeating alarms are inexact. 283e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate * 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.os.Handler 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #set 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #cancel 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.content.Context#sendBroadcast 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.content.Context#registerReceiver 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.content.Intent#filterEquals 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #ELAPSED_REALTIME 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #ELAPSED_REALTIME_WAKEUP 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RTC 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RTC_WAKEUP 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #INTERVAL_FIFTEEN_MINUTES 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #INTERVAL_HALF_HOUR 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #INTERVAL_HOUR 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #INTERVAL_HALF_DAY 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #INTERVAL_DAY 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 300e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate @Deprecated 30179074cd935854b497cb894046da13bb08a113982Jesse Wilson public void setInexactRepeating(int type, long triggerAtMillis, 30279074cd935854b497cb894046da13bb08a113982Jesse Wilson long intervalMillis, PendingIntent operation) { 303e0a22b324d0e3157e570ea5f71cc682fa9696e01Christopher Tate setRepeating(type, triggerAtMillis, intervalMillis, operation); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Remove any alarms with a matching {@link Intent}. 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Any alarm, of any type, whose Intent matches this one (as defined by 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Intent#filterEquals}), will be canceled. 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param operation IntentSender which matches a previously added 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * IntentSender. 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #set 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void cancel(PendingIntent operation) { 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.remove(operation); 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32297e44947282b3918ee0bed2d16b33b983f882580Dan Egnor 32397e44947282b3918ee0bed2d16b33b983f882580Dan Egnor /** 32497e44947282b3918ee0bed2d16b33b983f882580Dan Egnor * Set the system wall clock time. 32597e44947282b3918ee0bed2d16b33b983f882580Dan Egnor * Requires the permission android.permission.SET_TIME. 32697e44947282b3918ee0bed2d16b33b983f882580Dan Egnor * 32797e44947282b3918ee0bed2d16b33b983f882580Dan Egnor * @param millis time in milliseconds since the Epoch 32897e44947282b3918ee0bed2d16b33b983f882580Dan Egnor */ 32997e44947282b3918ee0bed2d16b33b983f882580Dan Egnor public void setTime(long millis) { 33097e44947282b3918ee0bed2d16b33b983f882580Dan Egnor try { 33197e44947282b3918ee0bed2d16b33b983f882580Dan Egnor mService.setTime(millis); 33297e44947282b3918ee0bed2d16b33b983f882580Dan Egnor } catch (RemoteException ex) { 33397e44947282b3918ee0bed2d16b33b983f882580Dan Egnor } 33497e44947282b3918ee0bed2d16b33b983f882580Dan Egnor } 33597e44947282b3918ee0bed2d16b33b983f882580Dan Egnor 33697e44947282b3918ee0bed2d16b33b983f882580Dan Egnor /** 33797e44947282b3918ee0bed2d16b33b983f882580Dan Egnor * Set the system default time zone. 33897e44947282b3918ee0bed2d16b33b983f882580Dan Egnor * Requires the permission android.permission.SET_TIME_ZONE. 33997e44947282b3918ee0bed2d16b33b983f882580Dan Egnor * 34097e44947282b3918ee0bed2d16b33b983f882580Dan Egnor * @param timeZone in the format understood by {@link java.util.TimeZone} 34197e44947282b3918ee0bed2d16b33b983f882580Dan Egnor */ 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTimeZone(String timeZone) { 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.setTimeZone(timeZone); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 349