Android notification Using AlarmManager and BroadcastReceiver in Android
Hello friends!
Sometimes we need to create an application that notifies a user at a particulartime/date even though the user has not opened the application. The Android SDK provides developers an abstract class called BroadcastReceiver which is used to pass a notification to the user in case any specific event occurs.
In addition, developers can also schedule and add events using theAlarmManager class. As stated in the Android developer’s guide, when an alarm goes off, the Intent that had been registered using AlarmManager is broadcasted by the system, automatically starting the target application if it is not already running.
Using the above concepts, we will now create an Android application that sends anotification message to the user at a particular time (for example: 11:25:00 AM).
Pre-requisites: Eclipse IDE (preferably latest version) , Android SDK (tested below code on Android 2.3.3)
Create a new Android application project named AndroidAlarmManagerDemowith package name com.example. Select Target SDK as Android 2.3.3
MainActivity.java
package com.example; import java.util.Calendar; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; public class MainActivity extends Activity { private PendingIntent pendingIntent; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, 6 ); calendar.set(Calendar.YEAR, 2013 ); calendar.set(Calendar.DAY_OF_MONTH, 13 ); calendar.set(Calendar.HOUR_OF_DAY, 20 ); calendar.set(Calendar.MINUTE, 48 ); calendar.set(Calendar.SECOND, 0 ); calendar.set(Calendar.AM_PM,Calendar.PM); Intent myIntent = new Intent(MainActivity. this , MyReceiver. class ); pendingIntent = PendingIntent.getBroadcast(MainActivity. this , 0 , myIntent, 0 ); AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); } //end onCreate } |
As stated earlier, we need to create a BroadcastReceiver that will that receive Intents. I have named my receiver class as MyReceiver.
MyReceiver.java
package com.example; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent service1 = new Intent(context, MyAlarmService. class ); context.startService(service1); } } |
We also need to implement a Service that represents the application’s need to run a longer operation in the background without interacting with the user. For this purpose let’s create a Service called MyAlarmService.
package com.example; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MyAlarmService extends Service { private NotificationManager mManager; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null ; } @Override public void onCreate() { // TODO Auto-generated method stub super .onCreate(); } @SuppressWarnings ( "static-access" ) @Override public void onStart(Intent intent, int startId) { super .onStart(intent, startId); mManager = (NotificationManager) this .getApplicationContext().getSystemService( this .getApplicationContext().NOTIFICATION_SERVICE); Intent intent1 = new Intent( this .getApplicationContext(),MainActivity. class ); Notification notification = new Notification(R.drawable.ic_launcher, "This is a test message!" , System.currentTimeMillis()); intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingNotificationIntent = PendingIntent.getActivity( this .getApplicationContext(), 0 , intent1,PendingIntent.FLAG_UPDATE_CURRENT); notification.flags |= Notification.FLAG_AUTO_CANCEL; notification.setLatestEventInfo( this .getApplicationContext(), "AlarmManagerDemo" , "This is a test message!" , pendingNotificationIntent); mManager.notify( 0 , notification); } @Override public void onDestroy() { // TODO Auto-generated method stub super .onDestroy(); } } |
Finally, don’t forget to change the AndroidManifest.xml file to include theService and the Receiver entries along with the necessary permissions. Save all changes and run the project on an Android device. You should see the following output!
AndroidManifest.xml
<? xml version = "1.0" encoding = "utf-8" ?> package = "com.example" android:versionCode = "1" android:versionName = "1.0" > < uses-sdk android:minSdkVersion = "8" android:targetSdkVersion = "10" /> < uses-permission android:name = "android.permission.WAKE_LOCK" /> < application android:allowBackup = "true" android:icon = "@drawable/ic_launcher" android:label = "@string/app_name" android:theme = "@style/AppTheme" > < activity android:name = "com.example.MainActivity" android:label = "@string/app_name" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name = "android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > < activity android:name = "com.example.NextActivity" android:label = "Next Screen" > </ activity > < service android:name = ".MyAlarmService" android:enabled = "true" /> < receiver android:name = ".MyReceiver" /> </ application > </ manifest > |
Updated source code for this tutorial can be found over here
from : http://karanbalkar.com/
No comments: