How to set Alarm in Android programmatically?

Following is my code can Any body please tell me why it is not working .I have learned it from this tutorial. But it is not working any help will be appreciable.

My code is

import java.util.Calendar;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.ListActivity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;


public class Notify extends Activity {
    Button btn;

    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.nit);
        Calendar cal=Calendar.getInstance();
        cal.set(Calendar.MONTH,6);
        cal.set(Calendar.YEAR,2011);
        cal.set(Calendar.DAY_OF_MONTH,29);
        cal.set(Calendar.HOUR_OF_DAY,17);
        cal.set(Calendar.MINUTE,30);

        //String[] dude=new String[] {"nitin","avi","aman","rahul","pattrick","minkle","manmohan","nitin","nitin"};

        //setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,dude));
        //getListView().setTextFilterEnabled(true);

        //String[] dude1=new String[] {"nitin","avi","aman","rahul","pattrick","minkle","manmohan"};

        Intent intent = new Intent(this, Mote.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT|  Intent.FILL_IN_DATA);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pendingIntent );
        Toast.makeText(this, "Alarm worked.", Toast.LENGTH_LONG).show();
    }

}

and my Receiver class is

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class Mote extends BroadcastReceiver{

    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
        int icon = R.drawable.icon;
        CharSequence tickerText = "Hello you have to take medicine I am Nitin Sharma";
        long when = System.currentTimeMillis();

        //Notification notification = new Notification(icon, tickerText,when );

        CharSequence contentTitle = "My notification";
        CharSequence contentText = "Hello World!";


        //notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
        final int NOTIF_ID = 1234;
        NotificationManager notofManager = (NotificationManager)context. getSystemService(Context.NOTIFICATION_SERVICE);
        // Notification note = new Notification(R.drawable.face,"NEW ACTIVITY", System.currentTimeMillis());
        Intent notificationIntent = new Intent(context, Alset.class);
        PendingIntent contentIntent = PendingIntent.getActivity(context,0, notificationIntent, 0);
        Notification notification = new Notification(icon, tickerText,when );
        //Notification notification1 = new Notification(R.drawable.icon, "Wake up alarm", System.currentTimeMillis());
        notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
        notification.flags = Notification.FLAG_INSISTENT;
        notification.defaults |= Notification.DEFAULT_SOUND;
        //notification.setLatestEventInfo(context, "My Activity", "This will runs on button click", contentIntent);
        notofManager.notify(NOTIF_ID,notification);

        //PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0);
        //notification.setLatestEventInfo(context, "Context Title", "Context text", contentIntent);
        //notification.flags = Notification.FLAG_INSISTENT;
    }



}

Solution 1:

I think you want to set the alarm for 26th June and not 26th July. If so then change cal.set(Calendar.MONTH,6); to cal.set(Calendar.MONTH,5); because the months are zero-based. if you intend the alarm to fire on 26th july then it is expected that the alarm will fire when the date-time is 26th July 2011, 17:30

Solution 2:

1.add this in manifest file

 <receiver android:name=".MyAlarmReciever">
            <intent-filter>
                <action android:name="com.example.helloandroid.alarms" />
            </intent-filter>
        </receiver>        
  1. make a activity

         public class AlrmActivity extends BaseAcitivity {
    
            TimePicker myTimePicker;
            Button buttonstartSetDialog;
            TextView textAlarmPrompt;
    
            TimePickerDialog timePickerDialog;
    
            final static int RQS_1 = 1;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_alrm);
    
                textAlarmPrompt = (TextView)findViewById(R.id.alarmprompt);
    
                buttonstartSetDialog = (Button)findViewById(R.id.startSetDialog);
                buttonstartSetDialog.setOnClickListener(new View.OnClickListener(){
    
                    @Override
                    public void onClick(View v) {
                        textAlarmPrompt.setText("");
                        openTimePickerDialog(false);
    
                    }});
    
    
            }
    
            private void openTimePickerDialog(boolean is24r){
                Calendar calendar = Calendar.getInstance();
    
                timePickerDialog = new TimePickerDialog(
                        AlrmActivity.this,
                        onTimeSetListener,
                        calendar.get(Calendar.HOUR_OF_DAY),
                        calendar.get(Calendar.MINUTE),
                        is24r);
                timePickerDialog.setTitle("Set Alarm Time");
    
                timePickerDialog.show();
    
            }
            TimePickerDialog.OnTimeSetListener onTimeSetListener
                    = new TimePickerDialog.OnTimeSetListener(){
    
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    
                    Calendar calNow = Calendar.getInstance();
                    Calendar calSet = (Calendar) calNow.clone();
    
                    calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
                    calSet.set(Calendar.MINUTE, minute);
                    calSet.set(Calendar.SECOND, 0);
                    calSet.set(Calendar.MILLISECOND, 0);
    
                    if(calSet.compareTo(calNow) <= 0){
                        //Today Set time passed, count to tomorrow
                        calSet.add(Calendar.DATE, 1);
                    }
    
                    setAlarm(calSet);
                }};
    
            private void setAlarm(Calendar targetCal){
    
                textAlarmPrompt.setText(
                        "\n\n***\n"
                                + "Alarm is set@ " + targetCal.getTime() + "\n"
                                + "***\n");
    
                Intent intent = new Intent(getBaseContext(), MyAlarmReciever.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
                AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
                alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
    
            }
    
        }
    

3 . xml file include

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="hello" />
        <Button
            android:id="@+id/startSetDialog"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Set Target Time"/>
        <TextView
            android:id="@+id/alarmprompt"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

4 .make alarm manager class

    public class MyAlarmReciever extends BroadcastReceiver {

        Vibrator v;
        Context ct;
        String  title;


        @Override
        public void onReceive(Context context, Intent intent) {

            // TODO Auto-generated method stub
            ct=context;

            Log.e("onReceive", "ladskjflsakjdflskjdflskjdfslkjdflasdf");
            Toast.makeText(context, "OnReceive alarm test", Toast.LENGTH_SHORT).show();

            v=(Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
            v.vibrate(3000);

            int badgeCount = 1;
           // ShortcutBadger.applyCount(context, badgeCount);

            ShortcutBadger.removeCount(context);

            Bundle bundle = intent.getExtras();
            try{
                  title = intent.getExtras().get("title").toString();
                 // title = intent.getStringExtra("title");
                Toast.makeText(context, title, Toast.LENGTH_LONG).show();
            }catch(Exception e){
                e.printStackTrace();
            }


    //        if (!Utlis.checkNetworkConnection(context)) {
    //
    //            Notification(context, "Wifi Connection off");
    //
    //        } else {
                Notification(context, "Please  pray for this prayer ");

    //        }

        }


        public void Notification(Context context, String message) {
            // Set Notification Title
            String strtitle = "iPray  Prayer Reminder";
            // Open NotificationView Class on Notification Click
            Intent intent = new Intent(context, PrayerForOtherActivity.class);
            // Send data to NotificationView Class
            intent.putExtra("title", title);
            intent.putExtra("text", title);
            // Open NotificationView.java Activity
            PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

    //        NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.app_icon, "Previous", pIntent).build();
            // Create Notification using NotificationCompat.Builder
            NotificationCompat.Builder builder = new NotificationCompat.Builder(
                    context)
                    // Set Icon
                    .setSmallIcon(R.drawable.app_icon)
                    // Set Ticker Message
                    .setTicker(message)
                    // Set Title
                    .setContentTitle(context.getString(R.string.app_name))
                    // Set Text
                    .setContentText(message)
                    // Add an Action Button below Notification
                    // Set PendingIntent into Notification
                    .setContentIntent(pIntent)
                    // Dismiss Notification
                    .setAutoCancel(true);

            // Create Notification Manager
            NotificationManager notificationmanager = (NotificationManager) context
                    .getSystemService(Context.NOTIFICATION_SERVICE);
            // Build Notification with Notification Manager
            notificationmanager.notify(38, builder.build());

        }
    }