Android notification Using AlarmManager and BroadcastReceiver in Android

Public on July 11, 2015
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
Now, let’s create our startup Activity called MainActivity by adding the following code!
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>
Output
Updated source code for this tutorial can be found over here


from : http://karanbalkar.com/











[Advertising]Faster Thinking - Speed up your brain


Faster Thinking Game



sentiment_satisfied Emoticon