Your SlideShare is downloading. ×
Broadcast receivers
Ilio Catallo, Eleonora Ciceri – Politecnico di Milano
ilio.catallo@polimi.it, eleonora.ciceri@polimi.it
TakeNotes v4: features
2
Study Android
Delete an existing note
Listeners
Insert text here
Create a new note
Intents
Store ...
TakeNotes: functionalities we are
adding today
¤ Some to-dos require to perform the associated tasks
before a given deadl...
TakeNotes: functionalities we are
adding today
¤ We are going to associate alarms with the to-dos that
require to be fini...
TakeNotes: add an alarm
5
Insert text here
Add alarm
Set alarm
To do
TakeNotes: notify the user
6
Either when the
application is active…
To do
...or not.
Other
stuff
here
!
Broadcast Intents
7
Using Intents to broadcast events
¤ Intents are able to send messages across process
boundaries
¤ You can implement a Br...
Broadcast Intents
¤ An intent used to send broadcasts to other applications is
called Broadcast Intent
¤ Broadcast Inten...
Types of broadcasts
¤ There are two classes of broadcasts that can be
received:
¤ Normal broadcasts: completely asynchro...
Normal broadcasts
¤ The method Context.sendBroadcast(Intent)
broadcasts the given intent to all interested receivers
¤ A...
Normal broadcasts
¤ Procedure
¤ Build the Intent to be broadcasted
¤ Call sendBroadcast()to send it
12
Ordered broadcasts
¤ The method Context.sendOrderedBroadcast()
broadcasts the given intent to all interested Broadcast
re...
The PendingIntent class
¤ A pending intent provides a mechanism for creating
Intents that can be fired on the application...
The PendingIntent class
¤ A pending intent provides a mechanism for creating
Intents that can be fired on the application...
The PendingIntent class
¤ A pending intent packages other Intents that will be fired
in response to a future event
16
Pending intent: start an Activity
¤ A pending intent can start an Activity
17
If the pending intent already exists,
updat...
Pending intent: start a Service
¤ A pending intent can start a Service
18
If the pending intent already exists,
update it...
Pending intent: broadcast an Intent
¤ A pending intent can broadcast an Intent
19
If the pending intent already exists,
u...
Broadcast receivers
20
Broadcast receivers
¤ A broadcast receiver is a class containing the code that
will receive the Broadcast Intents and han...
The onReceive() method
¤ To create a new Broadcast Receiver, extend the
BroadcastReceiver class and override the
onReceiv...
The onReceive() method
¤ The onReceive() method is executed when a Broadcast
Intent is received that matches its purpose
...
Start activities: Intents vs. Broadcasts
¤ Note that the Intent broadcast mechanism is completely
separated from Intents ...
The broadcast receiver lifecycle
¤ A broadcast receiver object is valid for the duration of
the call to onReceive()
¤ On...
The broadcast receiver lifecycle
¤ Asynchronous operations are NOT available:
¤ You have to return from the function to ...
Delaying actions
27
Delaying actions
¤ Pending intents can be used to cast broadcast messages
at a later time
¤ They contain an Intent speci...
The system services
¤ Several system services are available via the
getSystemService() method
¤ Complete list here
29
Sy...
The alarm manager
¤ The alarm manager is a system service that allows the
developer to schedule the application to be run...
The alarm manager
¤ The alarm manager is retrieved as follows:
¤ An alarm is set as follows:
31
Require that the
device ...
Delaying actions
32
ü Define the action
ü Include extras (e.g.,
messages)
Delaying actions
33
ü Define the action
ü Include extras (e.g.,
messages)
Create a Pending
intent that will require
to b...
Delaying actions
34
ü Define the action
ü Include extras (e.g.,
messages)
Create a Pending
intent that will require
to b...
Delaying actions
35
ü Define the action
ü Include extras (e.g.,
messages)
Create a Pending
intent that will require
to b...
Delaying actions
36
ü Define the action
ü Include extras (e.g.,
messages)
Create a Pending
intent that will require
to b...
Delaying actions
37
ü Define the action
ü Include extras (e.g.,
messages)
Create a Pending
intent that will require
to b...
Delaying actions
38
ü Define the action
ü Include extras (e.g.,
messages)
Create a Pending
intent that will require
to b...
More on views
39
Views appearance
¤ Fancy stuff here! It is possible to assign a different
appearance to several views included in the app...
starStyle on checkboxes
¤ The style:
¤ is obtained as follows:
41
Pickers
¤ Android provides controls for the user to pick a time or
pick a date as ready-to-use dialogs
¤ Each picker pro...
Pickers
¤ The pickers can be created by adding them in the XML
layout file
¤ Date picker
¤ Time picker
43
TakeNotes v5
Adding alarms and displaying them
44
Prepare the setting: the pickers
¤ In the layout file of AddToDoActivity we add two pickers:
45
Prepare the setting: the pickers
¤ In the layout file of AddToDoActivity we add two pickers:
46
Noticed something strange?
Prepare the setting: the pickers
¤ In the layout file of AddToDoActivity we add two pickers:
47
Noticed something strange...
Prepare the setting: the checkbox
¤ A user could decide to create a to-do item without
adding an alarm for it
¤ Thus, we...
A new version for the TakeNotes
database
¤ In the new TakeNotes version, the date is stored in the
database together with...
Enable/disable the pickers
¤ In the onCreate() method of AddToDoActivity, we
add a listener to the checkbox:
50
Save the alarm date
¤ Once the button “Add to list” is clicked, we need to:
¤ Verify whether an alarm was set for the ne...
Retrieve the date from the date picker
¤ The date picker stores information about the selected:
¤ Year
¤ Month
¤ Day
¤...
Retrieve the time from the time picker
¤ The time picker stores information about the selected:
¤ Hour
¤ Minute
¤ To r...
Returning the result to ToDoListActivity
¤ The result now contains:
¤ The to-do text
¤ The alarm date (in case)
¤ The ...
Start the alarm
¤ If the date is not empty, the alarm needs to be started
¤ When the alarm will go off, a dialog box con...
Start the alarm
¤ Then, the intent is encapsulated into a pending intent,
which will require to send the message as a bro...
Handle the request
¤ The AlarmReceiver class implements the broadcast
receiver that will require to show the popup on the...
Require the popup
¤ A new intent is created
¤ This intent will require to the ShowAlarmPopupActivity to
visualize the po...
Display the popup
¤ When the activity is created, the popup is shown on the
screen
¤ The popup contains the to-do text, ...
Display the popup
¤ When the user clicks on the positive button of the popup,
the ReturnToListListener requires to termin...
References
61
References
¤ BroadcastReceiver class reference:
http://developer.android.com/reference/android/conte
nt/BroadcastReceiver...
Upcoming SlideShare
Loading in...5
×

Broadcast Receivers in Android 5.x

323

Published on

An introduction to Broadcast Receivers in Android.

The source code is available at https://github.com/iliocatallo/takenotes

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
323
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Broadcast Receivers in Android 5.x"

  1. 1. Broadcast receivers Ilio Catallo, Eleonora Ciceri – Politecnico di Milano ilio.catallo@polimi.it, eleonora.ciceri@polimi.it
  2. 2. TakeNotes v4: features 2 Study Android Delete an existing note Listeners Insert text here Create a new note Intents Store existing notes Persistence
  3. 3. TakeNotes: functionalities we are adding today ¤ Some to-dos require to perform the associated tasks before a given deadline 3 Deliver my Mobile Applications project Deliver: today
  4. 4. TakeNotes: functionalities we are adding today ¤ We are going to associate alarms with the to-dos that require to be finished before a given date 4 Creating a new note The user decides whether to associate an alarm with it Deadline is reached A popup message appears on the screen The user is notified: the task has to be completed
  5. 5. TakeNotes: add an alarm 5 Insert text here Add alarm Set alarm To do
  6. 6. TakeNotes: notify the user 6 Either when the application is active… To do ...or not. Other stuff here !
  7. 7. Broadcast Intents 7
  8. 8. Using Intents to broadcast events ¤ Intents are able to send messages across process boundaries ¤ You can implement a Broadcast Receiver to listen for (and respond to) these broadcast messages 8 Application 1 Application 2 System My application
  9. 9. Broadcast Intents ¤ An intent used to send broadcasts to other applications is called Broadcast Intent ¤ Broadcast Intents notify applications of system events and application events ¤ Examples of system events ¤ Changes in network connectivity ¤ Incoming calls ¤ Docking state (car, desk, …) 9
  10. 10. Types of broadcasts ¤ There are two classes of broadcasts that can be received: ¤ Normal broadcasts: completely asynchronous ¤ All receivers of the broadcast are run in an undefined order ¤ More efficient ¤ Ordered broadcasts: delivered to one receiver at a time ¤ When a receiver executes, it can propagate the result to the next receiver or abort the broadcast 10
  11. 11. Normal broadcasts ¤ The method Context.sendBroadcast(Intent) broadcasts the given intent to all interested receivers ¤ Asynchronous call ¤ It returns immediately 11 Execution flow Send broadcast
  12. 12. Normal broadcasts ¤ Procedure ¤ Build the Intent to be broadcasted ¤ Call sendBroadcast()to send it 12
  13. 13. Ordered broadcasts ¤ The method Context.sendOrderedBroadcast() broadcasts the given intent to all interested Broadcast receivers ¤ Asynchronous call ¤ It returns immediately 13 Execution flow Send broadcast
  14. 14. The PendingIntent class ¤ A pending intent provides a mechanism for creating Intents that can be fired on the application’s behalf: ¤ By another application ¤ At a later time 14 I
  15. 15. The PendingIntent class ¤ A pending intent provides a mechanism for creating Intents that can be fired on the application’s behalf: ¤ By another application ¤ At a later time 15 I
  16. 16. The PendingIntent class ¤ A pending intent packages other Intents that will be fired in response to a future event 16
  17. 17. Pending intent: start an Activity ¤ A pending intent can start an Activity 17 If the pending intent already exists, update it with the new content
  18. 18. Pending intent: start a Service ¤ A pending intent can start a Service 18 If the pending intent already exists, update it with the new content
  19. 19. Pending intent: broadcast an Intent ¤ A pending intent can broadcast an Intent 19 If the pending intent already exists, update it with the new content
  20. 20. Broadcast receivers 20
  21. 21. Broadcast receivers ¤ A broadcast receiver is a class containing the code that will receive the Broadcast Intents and handle requests ¤ To register a broadcast receiver to the application, simply declare it in the manifest: 21
  22. 22. The onReceive() method ¤ To create a new Broadcast Receiver, extend the BroadcastReceiver class and override the onReceive() method 22
  23. 23. The onReceive() method ¤ The onReceive() method is executed when a Broadcast Intent is received that matches its purpose ¤ As answers, the Broadcast Receiver: ¤ Update contents ¤ Launch services ¤ Update Activity UI ¤ Notify the user using the Notification Manager 23
  24. 24. Start activities: Intents vs. Broadcasts ¤ Note that the Intent broadcast mechanism is completely separated from Intents that are used to start activities ¤ There is no way for a broadcast receiver to see or capture Intents used with the startActivity() method ¤ Starting an activity with an Intent is a foreground operation that modifies what the user is currently interacting with ¤ Broadcasting an Intent is a background operation that the user is not normally aware of 24
  25. 25. The broadcast receiver lifecycle ¤ A broadcast receiver object is valid for the duration of the call to onReceive() ¤ Once the code returns from this function, the system considers the object to be finished and no longer active ¤ Complete lifecycle ¤ When onReceive() is executing, the receiver is running as a foreground process ¤ Once onReceive() returns, the receiver is not active ¤ If the hosting process was only hosting the receiver, the system considers it as an empty process and kills it 25
  26. 26. The broadcast receiver lifecycle ¤ Asynchronous operations are NOT available: ¤ You have to return from the function to handle the asynchronous operation, but… ¤ …at that point the receiver is not active: the process is killed before the asynchronous operation is performed ¤ Best practice: ¤ Never show a dialog from within a broadcast receiver ¤ For longer-running applications: use a Service in conjunction with a Broadcast Receiver 26
  27. 27. Delaying actions 27
  28. 28. Delaying actions ¤ Pending intents can be used to cast broadcast messages at a later time ¤ They contain an Intent specifying the details of the action to be performed (that will be send to the Broadcast Receiver) ¤ Idea ¤ Create a pending intents specifying the action that has to be fired ¤ Create an alarm associated with the pending intent 28
  29. 29. The system services ¤ Several system services are available via the getSystemService() method ¤ Complete list here 29 System service Usage Power manager Controlling power management Notification manager Informing the user of background events Location manager Controlling location (e.g., GPS) updates WiFi manager Management of WiFi connectivity
  30. 30. The alarm manager ¤ The alarm manager is a system service that allows the developer to schedule the application to be run at some point in the future ¤ Expected behavior: 30 Wait
  31. 31. The alarm manager ¤ The alarm manager is retrieved as follows: ¤ An alarm is set as follows: 31 Require that the device will wake up in case it is sleeping when the alarm goes off
  32. 32. Delaying actions 32 ü Define the action ü Include extras (e.g., messages)
  33. 33. Delaying actions 33 ü Define the action ü Include extras (e.g., messages) Create a Pending intent that will require to broadcast the Intent
  34. 34. Delaying actions 34 ü Define the action ü Include extras (e.g., messages) Create a Pending intent that will require to broadcast the Intent
  35. 35. Delaying actions 35 ü Define the action ü Include extras (e.g., messages) Create a Pending intent that will require to broadcast the Intent
  36. 36. Delaying actions 36 ü Define the action ü Include extras (e.g., messages) Create a Pending intent that will require to broadcast the Intent Broadcast
  37. 37. Delaying actions 37 ü Define the action ü Include extras (e.g., messages) Create a Pending intent that will require to broadcast the Intent The broadcast receiver that was meant to receive the intent captures the message
  38. 38. Delaying actions 38 ü Define the action ü Include extras (e.g., messages) Create a Pending intent that will require to broadcast the Intent The broadcast receiver that was meant to receive the intent captures the message
  39. 39. More on views 39
  40. 40. Views appearance ¤ Fancy stuff here! It is possible to assign a different appearance to several views included in the application ¤ The R class stores a list of theme attributes that can be applied to several types of view ¤ Complete list here ¤ An example: 40
  41. 41. starStyle on checkboxes ¤ The style: ¤ is obtained as follows: 41
  42. 42. Pickers ¤ Android provides controls for the user to pick a time or pick a date as ready-to-use dialogs ¤ Each picker provides controls for selecting each part of: ¤ Time (hour/minute/AM-PM) ¤ Date (month/year/day) 42
  43. 43. Pickers ¤ The pickers can be created by adding them in the XML layout file ¤ Date picker ¤ Time picker 43
  44. 44. TakeNotes v5 Adding alarms and displaying them 44
  45. 45. Prepare the setting: the pickers ¤ In the layout file of AddToDoActivity we add two pickers: 45
  46. 46. Prepare the setting: the pickers ¤ In the layout file of AddToDoActivity we add two pickers: 46 Noticed something strange?
  47. 47. Prepare the setting: the pickers ¤ In the layout file of AddToDoActivity we add two pickers: 47 Noticed something strange? We are using match_parent instead of fill_parent. They are the same! ü Specifically, match_parent is the way in which Android renames fill_parent in API Level 8+
  48. 48. Prepare the setting: the checkbox ¤ A user could decide to create a to-do item without adding an alarm for it ¤ Thus, we add a checkbox that, if clicked, enables the pickers (thus allowing the user to add the alarm) 48
  49. 49. A new version for the TakeNotes database ¤ In the new TakeNotes version, the date is stored in the database together with the to-do message ¤ The database handler is thus modified, adding new fields to the to-do table: 49
  50. 50. Enable/disable the pickers ¤ In the onCreate() method of AddToDoActivity, we add a listener to the checkbox: 50
  51. 51. Save the alarm date ¤ Once the button “Add to list” is clicked, we need to: ¤ Verify whether an alarm was set for the new item ¤ In case, store the date so that it can be retrieved by the ToDoListActivity class 51
  52. 52. Retrieve the date from the date picker ¤ The date picker stores information about the selected: ¤ Year ¤ Month ¤ Day ¤ To retrieve this information: 52
  53. 53. Retrieve the time from the time picker ¤ The time picker stores information about the selected: ¤ Hour ¤ Minute ¤ To retrieve this information: 53
  54. 54. Returning the result to ToDoListActivity ¤ The result now contains: ¤ The to-do text ¤ The alarm date (in case) ¤ The call to addNewToDoToList() is thus modified 54
  55. 55. Start the alarm ¤ If the date is not empty, the alarm needs to be started ¤ When the alarm will go off, a dialog box containing the text of the to-do item will be displayed ¤ We start by creating the intent: 55
  56. 56. Start the alarm ¤ Then, the intent is encapsulated into a pending intent, which will require to send the message as a broadcast message: ¤ Finally, the alarm is set: 56
  57. 57. Handle the request ¤ The AlarmReceiver class implements the broadcast receiver that will require to show the popup on the screen ¤ In the onReceive() method, we receive the intent containing the to-do item text: ¤ Then, we verify whether the to-do is still in the list: 57
  58. 58. Require the popup ¤ A new intent is created ¤ This intent will require to the ShowAlarmPopupActivity to visualize the popup containing the to-do text 58
  59. 59. Display the popup ¤ When the activity is created, the popup is shown on the screen ¤ The popup contains the to-do text, retrieved from the intent 59
  60. 60. Display the popup ¤ When the user clicks on the positive button of the popup, the ReturnToListListener requires to terminate the current activity (i.e., ShowAlarmPopupActivity): 60
  61. 61. References 61
  62. 62. References ¤ BroadcastReceiver class reference: http://developer.android.com/reference/android/conte nt/BroadcastReceiver.html ¤ DatePicker class reference: http://developer.android.com/reference/android/widge t/DatePicker.html ¤ Android developers guide, Pickers http://developer.android.com/guide/topics/ui/controls/ pickers.html 62

×