2. What’s our Intent ? Intent in Android Intents are used as a message-passing mechanism that works both within application, and between applications. Intents in Android are used to fulfill the intentions to – An Activity or Service be started to perform an action, usually with (or on) a particular piece of data Broadcast that an event (or action) has occurred Explicitly start a particular Service or Activity Types of Intents Explicit –Where the Activity or the Service class to be loaded is explicitly defined Implicit – Where an action be performed on a piece of data is requested 2
3. Running an Intent Explicitly Switching from one Activity to another Without feedback Intent intent = new Intent(MyActivity.this, MyOtherActivity.class); startActivity(intent); With Feedback private static final int SHOW_SUBACTIVITY = 1; Intent intent = new Intent(this, MyOtherActivity.class); startActivityForResult(intent, SHOW_SUBACTIVITY); 3
4. Implicitly Starting an Activity Implicit Intent is a mechanism that lets anonymous application components service action requests. Implicit Activity is started as a sub-Activity that’s inherently connected to its parent. A sub-Activity triggers an event handler within its parent Activity when it closes. Intentintent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:555-2368")); startActivity(intent); To nominate an action to perform and, optionally, supply the URI of the data to perform that action on. When our sub-Activity is ready to return, call setResult before finish to return a result to the calling Activity. 4
6. Sub-Activity Handler When a sub-Activity closes, the onActivityResult event handler is fired within the calling Activity. Override this method to handle the results returned by sub-Activities. This method takes 3 parameters- Request code The request code that was used to launch the returning sub-Activity. Result code The result code set by the sub-Activity to indicate its result. It can be any integer value, but typically will be either Activity.RESULT_OK or Activity.RESULT_CANCELED. Intent– The Intent used to return the packaged data 6
7. Intent Filters Intent Filters are used to register Activities, Services, and Broadcast Receivers as being capable of performing an action on a particular kind of data. Using Intent Filters, application components announce that they can respond to action requests from any application installed on the device. 1. Android puts together a list of all the Intent Filters available from the installed packages. 2. Intent Filters that do not match the action or category associated with the Intent being resolved are removed from the list. 2.1. Action matches are made 2.2. Category matching is stricter 3. Finally, each part of the Intent’s data URI is compared to the Intent Filterdsata tag. 3.1. The MIME type is the data type of the data being matched 3.2. The scheme is the ‘‘protocol’’ part 3.3 For a hostname to match, the Intent Filter’s scheme must also pass. 7
8. 8 Android Notifications Notification message is shown on the top of the screen, to alert users that events have occurred that may require attention. TheNotificationManagerclass is responsible for handling the Notifications- Its capability are Create new status bar icons Display additional information (and launch an Intent) in the extended status bar window Flash the lights/LEDs Vibrate the phone Sound audible alerts (ringtones, Media Store audio)
9. 9 Creating a Notification Pending Intent By giving a PendingIntent to another application, we are granting it the right to perform the operation we have specified as if the other application was ourself (with the same permissions and identity). This is used in setting the notification Intent intent = new Intent(this, MyActivity.class); PendingIntentlaunchIntent = PendingIntent.getActivity(context, 0, intent, 0); setLatestEventInfo(context,expandedTitle,expandedText,launchIntent);
10. Android Service A Service is an application component that can perform long-running operations in the background and does not provide a user interface. Additionally, a component can bind to a service to interact with it and even perform interprocess communication (IPC). 10
11.
12. Once started, a service can run in the background indefinitely.
13.
14. A bound service offers a client-server interface that allows components to interact with the service, send requests, get results, and even do so across processes with interprocess communication (IPC). 11
15. Importance of Services and their use A facility for the application to tell the system about something it wants to be doing in the background (even when the user is not directly interacting with the application). This corresponds to calls to Context.startService(), which ask the system to schedule work for the service, to be run until the service or someone else explicitly stop it. A facility for an application to expose some of its functionality to other applications. This corresponds to calls to Context.bindService(), which allows a long-standing connection to be made to the service in order to interact with it. 12
16. Creating a Service and associating it with an Activity Create a class that extends the Service class Add this new Service to the manifest by adding a new service tag within the application node. Override the onStartCommandand onCreate. Set the return type of the onStartCommandMethod from one of these to set the service behavior a. START_STICKY b. START_NOT_STICKY c. START_REDELIVER_INTENT To start a Service, call startService; we can either use an action to implicitly start a Service with the appropriate Intent Receiver registered, or we can explicitly specify the Service using its class. If the Service requires permissions that our application does not have, the call to startService will throw a SecurityException. To stop a Service use stopService, passing an Intent that defines the Service to stop. 13
17. Service Life Cycle Mode 1 - Context.startService() If someone calls Context.startService() then the system will retrieve the service (creating it and calling its onCreate() method if needed) and then call its onStartCommand(Intent, int, int) method with the arguments supplied by the client. The service will at this point continue running until Context.stopService() or stopSelf() is called. Mode 2 - Context.bindService() On calling Context.bindService() to obtain a persistent connection to a service creates the service if it is not already running (calling onCreate() while doing so), but does not call onStartCommand(). The client will receive the IBinder object that the service returns from its onBind(Intent) method, allowing the client to then make calls back to the service. The service will remain running as long as the connection is established (whether or not the client retains a reference on the service's Ibinder 14
18. 15 Android Interface Definition Language : AIDL It allows we to define the programming interface that both the client and service agree upon in order to communicate with each other using interprocess communication (IPC). When you build each application that contains the .aidl file, the Android SDK tools generate an IBinder interface based on the .aidl file and save it in the project's gen/ directory. The service must implement the IBinder interface as appropriate. To create a bounded service using AIDL, follow these steps: Create the .aidl file This file defines the programming interface with method signatures. Implement the interface The Android SDK tools generate an interface in the Java programming language, based on our .aidl file. This interface has an inner abstract class named Stub that extends Binder and implements methods from our AIDL interface. we must extend the Stub class and implement the methods. Expose the interface to clients Implement a Service and override onBind() to return our implementation of the Stub class.
19. Broadcast Receivers A broadcast receiver is a class which extends BroadcastReceiverclass and which is registered as a receiver in an Android Application via the AndroidManifest.xml (or via code). This class will be able to receive intents via the sendBroadcast() method. Broadcast receiver is a component that responds to system-wide broadcast announcements 16
20. There are two major classes of broadcasts that can be received: Normal broadcasts(sent with Context.sendBroadcast) are completely asynchronous. All receivers of the broadcast are run in an undefined order, often at the same time. This is more efficient. Ordered broadcasts(sent with Context.sendOrderedBroadcast) are delivered to one receiver at a time. As each receiver executes in turn, it can propagate a result to the next receiver, or it can completely abort the broadcast so that it won't be passed to other receivers 17
21. Importance of Broadcast receivers Broadcast receivers are implemented In order to monitor and respond any changes in the intents which are registered with it. We ca attach a Broadcast Receiver with any activity or intent, in which if ay event or state change occurs, we have to perform some action or function corresponding to it. Broadcast receiver responds to system wide announcements, so we can register ay event In the system for monitoring and broadcasting ay change In the desired parameter 18
22. 19 SQLite Databases Android provides full support for SQLite databases. Any databases we create will be accessible by name to any class in the application, but not outside the application. To create a new SQLite database is to create a subclass of SQLiteOpenHelper and override the onCreate() method, in which we can execute a SQLite command to create tables in the database. getWritableDatabase() and getReadableDatabase() To write and read from database, their return type is SQLiteDatabase class that provides methods for database operations. SQLiteDatabase query() methods – to execute queries, these methods takes various parameters, for various quires. CursorIt’s the return type of any SQLite query and the mechanism with which we can navigate results from a database query and read rows and columns.
24. 21 Content Providers Content Providers - Content providers are interfaces to store and retrieve data and make it accessible to all applications. They're the only way to share data across applications How to use content-providers public class MyProvider extends ContentProvider { @Override public boolean onCreate() { // TODO Construct the underlying database. return true; } }
25. 22 Using a Content-provider We should expose a public static CONTENT_URI property that returns the full URI of this provider We will use the URI matcher for this public static final Uri CONTENT_URI = Uri.parse(myURI); static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI("com.paad.provider.myApp", "items", ALLROWS); uriMatcher.addURI("com.paad.provider.myApp", "items/#", SINGLE_ROW); } Then expose queries and transactions on our Content Provider by implementing the delete, insert,update, and query methods. Register our provider by - <provider android:name="MyProvider" android:authorities="com.paad.provider.myapp"/>
26. 23 Using Content-Resolver The Content resolver is the interface that is used to obtain the underlying data using its various abstract methods. ContentResolvercr = getContentResolver(); // Return all rows Cursor allRows = cr.query(MyProvider.CONTENT_URI, null, null, null, null); // Return all columns for rows where column 3 equals a set value // and the rows are ordered by column 5. String where = KEY_COL3 + "=" + requiredValue; String order = KEY_COL5; Cursor someRows = cr.query(MyProvider.CONTENT_URI, null, where, null, order);