Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set one time alarm in android

I am doing alarm Project,

I want to set one time alarm.. But i am facing problem to set tat,

My code is;

public void loadCalender(String month) {

    try {

        Cursor cursor = null;

        Database db = new Database(getApplicationContext());

        cursor = db.getSelectedCalenderDetails(month);
        if (cursor.getCount() != 0) {
            if (cursor.moveToFirst()) {
                do {
                    String text = cursor.getString(cursor
                            .getColumnIndex("event"));
                    String title = "News/Events";
                    String dates = cursor.getString(cursor
                            .getColumnIndex("date"));

                    String yr = dates.substring(0, 4);
                    int year = Integer.parseInt(yr);
                    String mon = dates.substring(5);
                    String mo = mon.substring(0, 2);
                    int months = Integer.parseInt(mo);
                    String da = dates.substring(9);
                    int day = Integer.parseInt(da);

                    // Ask our service to set an alarm for that date,
                    // this
                    // activity talks to the client that talks to the
                    // service
                    set_alarm(year, months, day, title, text);
                    System.out.println(dates);

                } while (cursor.moveToNext());

            }

        }
        cursor.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

    // looping through All Contacts

}


public void set_alarm(int year, int month, int day, String title,
        String text) {
    SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(getApplicationContext());

    // etc
    Calendar cal = Calendar.getInstance();
    int hour = prefs.getInt("PREF_HOUR", 0);
    int min = prefs.getInt("PREF_MIN", 0);
    if(hour == 0 && min == 0){


    cal.set(Calendar.MONTH, month - 1);
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.DAY_OF_MONTH, 7);

    cal.set(Calendar.HOUR_OF_DAY, 15);
    cal.set(Calendar.MINUTE, min);
    }else
    {

        cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.DAY_OF_MONTH, hour);

        cal.set(Calendar.HOUR_OF_DAY, min);
        cal.set(Calendar.MINUTE, min);
    }
    Intent intent = new Intent(getApplicationContext(), AlarmActivity.class);
    intent.putExtra("title", title);
    intent.putExtra("text", text);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
            getApplicationContext(), 1, intent,
            PendingIntent.FLAG_ONE_SHOT);

    AlarmManager alarmManager = (AlarmManager) getApplicationContext()
            .getSystemService(getApplicationContext().ALARM_SERVICE);

    /*
     * alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
     * pendingIntent);
     */

    alarmManager.cancel(pendingIntent); // cancel any existing alarms

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY,

            pendingIntent);
}

Here the alarm push is enabled always, when the app is opened...

Wat mistake did i do in my code.. plz help me to set the one time alarm

Thanks in advance

like image 950
Joy Helina Avatar asked Mar 28 '13 08:03

Joy Helina


People also ask

How do you set an alarm after every hour?

Open the Clock app then select the Alarm tab from the bottom of the screen. At the top of the main panel you should see an option to Add alarm.


3 Answers

You need to use setAlarm() method instead of setRepeating()

alarmManager.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),pendingIntent);
like image 66
Pratik Avatar answered Sep 19 '22 16:09

Pratik


How about that I'm using

alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);

and I want to push notification in future by alarmMenager It works while app is still running, while I call allarm menager to set notify in futer and close app my notification didn't show. WHat i have to do ?

here u got my event sender:

Calendar cal = Calendar.getInstance();
 cal.set(Calendar.HOUR, HOUR_OF_DAY);
 cal.set(Calendar.MINUTE, MINUTE);
 //cal.add(Calendar.SECOND, SECOND_OF_DAY);
 Intent intent = new Intent(UnityPlayer.currentActivity, TimeAlarm.class);
 intent.putExtra("alarm_status", statusMessage);
 intent.putExtra("alarm_title", title);
 intent.putExtra("alarm_content", content);
 Log.i("SenderEvent ", "przygotowane dane");
 PendingIntent sender = PendingIntent.getBroadcast(UnityPlayer.currentActivity.getApplicationContext(), REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
 am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);

And Reciever:

Bundle bundle = intent.getExtras();
        String statusMessage = bundle.getString("alarm_status");
        String title = bundle.getString("alarm_title");
        String content = bundle.getString("alarm_content");
        nm = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
                new Intent(), 0);
Notification notif =new Notification();//R.drawable.ic_launcher,statusMessage, System.currentTimeMillis());;
        //notif.largeIcon = bitmap;
        notif.icon =2130837504;
        notif.tickerText=statusMessage;
        notif.when= System.currentTimeMillis(); 
        /*
        new Notification(0,
                statusMessage, System.currentTimeMillis());*/
        notif.setLatestEventInfo(context, title, content, contentIntent);
        nm.notify(NOTIFY_ME_ID, notif);

Whats wrong with that to push notification in the future while app is close ?

like image 29
Shial Avatar answered Sep 19 '22 16:09

Shial


Instead of using alarmManager.setRepeating use alarmManager.set to set one time alarm

like image 29
Amit Avatar answered Sep 20 '22 16:09

Amit