1 / 25

Mobile Computing

Mobile Computing. Lecture#08 IntentFilters & BroadcastReceivers. Lecture Contents. Intent Filters for Plug-ins/ Extensibility Annonymous Actions to Applications Intents to Broadcast Events Listening for Broadcasts Broadcast Receivers BroadcastReceivers in Code

hadar
Download Presentation

Mobile Computing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Mobile Computing Lecture#08 IntentFilters & BroadcastReceivers

  2. Lecture Contents • IntentFilters for Plug-ins/Extensibility • Annonymous Actions to Applications • Intents to BroadcastEvents • Listening for Broadcasts • BroadcastReceivers • BroadcastReceivers in Code • BroadcastReceivers in XML • Native AndroidBroadcast Actions

  3. Broadcasting • System level message sending mechanism • Structured message sending across applications • Intents can be used to send messages across applications via sendBroadcast() method • Broadcast intents extend the event driven approach (all applications on a system may behave like event handlers) • Applications registered to handle an event can react to that event without causing any change in event generating application

  4. Broadcasting an Event Two step process:::: • Build the intent for Broadcast • Broadcast the built intent

  5. Android Code public static final String new_life_appeared = “com.test.lives.NEW_LIFE”; Intent intent = new Intent(new_life_appeared); intent.putExtra(“type”, “human_life”); intent.putExtra(“where”, “unknown_location”); …….. …….. sendBroadcast(intent);

  6. Listening for Broadcasts • BroadcastReceiver is a instance of a class that has registered itself as receiver for a particular broadcast event • For a class to work as a BroadcastRegister, it must register itself as BroadcastReceiver • Two methods to register:: • Register in manifest • Register in code

  7. Listening for Broadcasts • While registering as a BroadcastReceiver a class must specify the intent-filter to describe which event this class is listening for

  8. Creating a BroadcastReceiver public class MyBroadcastReceiver extends BroadcastReceiver{ public void onReceive(Context c, Intent intent){ //Some code to handle the event }//End of onReceive } //End of MyBroadcastReceiver • onReceive() function is called automatically when event-generated is matched with the one described in intent-filter tag.

  9. onReceive() example public void onReceive(Context context, Intent intent){ Uri data = intent.getData(); String type = intent.getStringExtra(“type”); …… …… Typically launch some activity/service to perform some action based on the intent received. }

  10. BroadcastReceiver in XML <receiver android:name=“com.test.MyBroadcastReceiver”> <intent-filter> <action android:name=“…….”> ………………….. </intent-filter> </receiver> • Receiver registered in xml (manifest) will always be active (even if application is not running/application is in background)

  11. Receiver Example Code public void onReceive(Context context, Intent intent){ Bundle extras = intent.getExtras(); if (extras != null) { String state = extras.getString(TelephonyManager.EXTRA_STATE); if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { String phoneNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); Log.i(tag+":Number", phoneNumber); } } }

  12. Receiver Example Manifest <receiver android:name="com.braodcast.receiver.MyPhoneReceiver"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE"> </action> </intent-filter> </receiver>

  13. Registering Receiver in Code IntentFilter filter = new IntentFilter(string-event); MyBroadcastReceiver receiver = new MyBroadcastReceiver(); registerReceiver(receiver, filter);

  14. Unregister a Receiver unregisterReceiver(receiver);

  15. Dynamic Receiver A receiver can register as a receiver for any global event for a particular period of time and later can unregister when span of interest is gone. • Listening for outgoing calls during office-hours • When phone screen is turned on/off during night • ……………

  16. Native Android Broadcast Events

  17. Native Android Broadcast Events

  18. Pending Intents • The PendingIntent class provides a mechanism for creating Intents that can be fired by another applicationat a later time. • A Pending Intent is commonly used to package an Intent that will be fired in response to a future event, such as a widget View being clicked or a Notification being selected from the notification panel. • PendingIntent class offers static methods to construct Pending Intents used to start an Activity, start a Service, or broadcast an Intent.

  19. Pending Intents // Start an Activity Intent startIntent = new Intent(this, OtherActivity.class); PendingIntent.getActivity(this, 0, startIntent , 0); // Broadcast an Intent Intent broadcastIntent = new Intent(NEW_LIFEFORM_DETECTED); PendingIntent.getBroadcast(this, 0, broadcastIntent, 0);

  20. Pending Intent It is a token that you give to a foreign application (e.g. Notification Manager, Alarm Manager, Home Screen AppWidget Manager, or other 3rd party applications), which allows a foreign application to use your application's permissions to execute a predefined piece of code.

  21. Pending Intent If you give the foreign application an Intent, and that application sends/broadcasts the Intent you gave, they will execute the Intent with their own permissions. But if you instead give the foreign application a Pending Intent you created using your own permission, that application will execute the contained Intent using your application's permission.

  22. Pending Intent Example (Main.xml) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=… android:orientation="vertical“ android:layout_width="fill_parent“ android:layout_height="fill_parent"> <EditText android:layout_height="wrap_content" android:id="@+id/time" android:layout_width="wrap_content" android:hint="Number of seconds" android:inputType="numberDecimal"/> <Button android:text="Start Counter" android:id="@+id/ok" android:onClick="startAlert" android:layout_width="wrap_content" android:layout_height="wrap_content” /> </LinearLayout>

  23. Pending Intent Example (TimerReceiver.java) public class TimerReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent){ Toast.makeText(context, “Your time is up", Toast.LENGTH_LONG).show(); // Vibrate the mobile phone Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(2000); } }

  24. Pending Intent Example (Main.java) public class Main extends Activity { EditText time; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }

  25. Pending Intent Example (Manifest) <receiver android:name=".TimerReceiver"> </receiver> <uses-permission android:name="android.permission.VIBRATE"> </uses-permission>

More Related