We now know what Activities and Intents are. Time to move on to services. However, since services mostly interact with a user through notifications, we need to first understand how a simple program to deal with Notifications.
What are Notifications?
They are a way of alerting a user about an event that he needs to be informed about or even take some action on getting that information.
Notification on Android can be done in any of the following ways:
Through the Notification, we can allow the user to launch a new activity as well. Now we will look at status bar notification since this can be easily tested on the emulator.
To create a status bar notification, we'll need to use two classes:Notification and NotificationManager.
Once we got this handle, we invoke the notify() method on it by passing the notification object created.
So far, we have all the information to display on the status bar. However, when the user clicks the notification icon on the status bar, what detailed information should we show the user?
This is yet to be created. This is done by calling the method setLatestEventInfo() on the notification object.
What needs to be passed to this method, we will see with an example.
private NotificationManager mNotificationManager; mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
final Notification notifyDetails = new Notification(R.drawable.android,"You've got a new notification!",System.currentTimeMillis());
Context context = getApplicationContext(); CharSequence contentTitle = "Notification Details..."; CharSequence contentText = "Browse Android Official Site by clicking me"; Intent notifyIntent = new Intent(android.content.Intent.ACTION_VIEW,Uri.parse("http://www.android.com")); PendingIntent intent = PendingIntent.getActivity(NotificationsA.this, 0, notifyIntent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK); notifyDetails.setLatestEventInfo(context, contentTitle, contentText, intent); mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails);
mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails);Note that all of the above actions(except getting a handle to the NotificationManager) are done on the click of a buttonStart Notification. So all the details go into the setOnClickListener() method of the button. Similarly, the notification, for the example sake is stopped by clicking a cancel notification button. And the code there is :
mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
Now, you may realize that the constant SIMPLE_NOTIFICATION_ID becomes the way of controlling, updating, stopping a current notification that is started with the same ID.
Here is our Java code, NotificationA.java:
package com.bogotobogo.notificationsa; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class NotificationsA extends Activity { private NotificationManager mNotificationManager; private int SIMPLE_NOTFICATION_ID; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); final Notification notifyDetails = new Notification(R.drawable.android, "You've got a new notification!",System.currentTimeMillis()); Button start = (Button)findViewById(R.id.notifyButton); Button cancel = (Button)findViewById(R.id.cancelButton); start.setOnClickListener(new OnClickListener() { public void onClick(View v) { Context context = getApplicationContext(); CharSequence contentTitle = "Notification Details..."; CharSequence contentText = "Browse Android Official Site by clicking me"; Intent notifyIntent = new Intent(android.content.Intent.ACTION_VIEW,Uri.parse("http://www.android.com")); PendingIntent intent = PendingIntent.getActivity(NotificationsA.this, 0, notifyIntent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK); notifyDetails.setLatestEventInfo(context, contentTitle, contentText, intent); mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails); } }); cancel.setOnClickListener(new OnClickListener() { public void onClick(View v) { mNotificationManager.cancel(SIMPLE_NOTFICATION_ID); } }); } }
Files used in this Notification example, NotificationsA.zip