First, the basic knowledge
Reference: http://www.360doc.com/content/13/0110/23/11991_259460170.shtml
1, Alarmmanager, as the name implies, is a "reminder", is commonly used in Android system-level prompt service , at a specific time for us to broadcast a designated intent. The simple thing is that we set a time, and then at that time, Alarmmanager broadcast a intent we set for us, usually we use pendingintent,pendingintent can be understood as intent package, The simple thing is to add a specified action on the intent. When using intent, we also need to perform startactivity, StartService, or sendbroadcast to make intent useful. And Pendingintent's words are to include this action inside.
Defines a Pendingintent object.
pendingintent pi = pendingintent.getbroadcast (this,0,intent,0);
2, there are three common methods of Alarmmanager:
(1) Set (int type,long starttime,pendingintent pi);
This method is used to set a one-time alarm, the first parameter represents the alarm type, the second parameter indicates the alarm execution times, and the third parameter represents the alarm response action.
(2)setrepeating (int type,long starttime,long intervaltime,pendingintent pi);
This method is used to set a repeating alarm, the first parameter represents the alarm type, the second parameter represents the first time the alarm is executed, the third parameter represents the interval between two executions of the alarm, and the third parameter represents the alarm response action.
(3) setinexactrepeating (int type,long starttime,long intervaltime,pendingintent pi);
This method is also used to set a repeating alarm, similar to the second method, although the interval between the two alarms is not fixed.
3, three methods of each parameter keyholder:
(1) INT type: Alarm types, commonly used with 5 values: Alarmmanager.elapsed_realtime, Alarmmanager.elapsed_realtime_wakeup, ALARMMANAGER.RTC, Alarmmanager.rtc_wakeup, Alarmmanager.power_off_wakeup.
Alarmmanager.elapsed_realtime means that the alarm clock is not available when the phone is asleep, and the alarm is used relative to the time (starting with the system boot) and the state value is 3;
Alarmmanager.elapsed_realtime_wakeup indicates that the alarm will wake up the system and perform the prompt function, the alarm clock also uses relative time, the status value is 2;
ALARMMANAGER.RTC indicates that the alarm is not available in sleep, and the alarm is used in absolute time, that is, the current system time, the status value is 1;
Alarmmanager.rtc_wakeup means that the alarm will wake up the system and perform the prompt function when the alarm is in the state of sleep, which has an absolute time and a state value of 0.
Alarmmanager.power_off_wakeup means that the alarm clock in the state of the hand machine can also be a normal prompt function, so it is one of the most used in 5 states, the alarm is also used absolute time, the status value of 4; But this state seems to be affected by the SDK version, Some editions are not supported;
(2) long startTime: The first time the alarm is executed, in milliseconds, the time can be customized, but the current time is generally used. It is important to note that this property is closely related to the first property (type), and if the alarm corresponding to the first parameter uses a relative time (Elapsed_realtime and Elapsed_realtime_wakeup), Then this property will have to use relative time (relative to the system boot time), such as the current time is expressed as: Systemclock.elapsedrealtime (); If the first parameter corresponds to an alarm with an absolute time (RTC, Rtc_wakeup, Power_ Off_wakeup), then this property will have to use absolute time, such as the current time is expressed as: System.currenttimemillis ().
(3) long intervaltime: For the latter two methods, this property exists, indicating the interval between two alarm executions, and in milliseconds.
(4) Pendingintent pi: Binding the execution of the alarm clock, such as sending a broadcast, giving hints and so on. Pendingintent is the encapsulation class for intent. It should be noted that if the alarm is implemented by starting the service, the Pendingintent object should be acquired using the Pending.getservice (Context c,int i,intent intent,int j) method If the alarm is realized by broadcasting, the Pendingintent object should be acquired using Pendingintent.getbroadcast (Context c,int i,intent intent,int j) method. If the alarm is implemented in an activity way, the Pendingintent object should be acquired using the pendingintent.getactivity (Context c,int i,intent intent,int j) method. If these three methods are wrong, although not error, but do not see the alarm effect.
4. Example: Define an alarm and repeat the response for 5 seconds.
(1) mainactivity, completed in OnCreate:
[Java]View Plaincopy?
- //Create intent object, action is Elitor_clock, additional information is string "you should soy sauce."
- Intent Intent = New Intent ("Elitor_clock");
- Intent.putextra ("msg","You should soy sauce");
- //Define a Pendingintent object, Pendingintent.getbroadcast contains the action of Sendbroadcast.
- //That is, send the action as "Elitor_clock" intent
- pendingintent pi = pendingintent.getbroadcast (this,0, intent, 0);
- //alarmmanager Object, note that this is not a new object, Alarmmanager is a system-level service
- Alarmmanager am = (alarmmanager) getsystemservice (Alarm_service);
- //Set Alarm to execute Pendingintent object pi every 5s, starting at the current time, note the relationship of the first parameter to the second parameter
- send broadcast via Pendingintent Pi object after 5 seconds
- am.setrepeating (Alarmmanager.rtc_wakeup,system.currenttimemillis (),5*1000 , pi);
After starting mainactivity, the Alarmmanager AM is defined and the am.setrepeating (...) is called. function, the system sends a broadcast via the PI boot intent every 5s with the action Elitor_clock. So we need to register a receiver in Manifest.xml and define a broadcast receiver class ourselves.
(2) Define a broadcast receiver class Myreceiver, overriding the OnReceive () function.
[Java]View Plaincopy?
- Public class myreceiver extends broadcastreceiver
- {
- @Override
- public void onreceive (context context, Intent Intent)
- {
- //TODO auto-generated method stub
- log.d ("mytag", "Onclock ............");
- String msg = Intent.getstringextra ("msg");
- Toast.maketext (Context,msg,toast.length_short). Show ();
- }
- }
(3) Register the broadcast receiver in the manifest.xml:
[HTML]View Plaincopy?
- < receiver android:name=". Myreceiver ">
- <intent-filter >
- < action android:name="Elitor_clock" />
- </intent-filter >
- </ receiver >
Use of the Android timer