Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set an Alarm from My application

I want to create an alarm object from my application. I am writing a To-Do application which will have an option to set an Alarm on the phone.

I wanna set the Date and Time and also the Label for the alarm.

Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
        c.clear();
        c.set(Calendar.YEAR, mYear);
        c.set(Calendar.MONTH, mMonth);
        c.set(Calendar.DAY_OF_MONTH, mDay);
        c.set(Calendar.HOUR, mHour);
        c.set(Calendar.MINUTE, mMinute);
        Intent activate = new Intent(this, alaram.class);
        AlarmManager alarams ;
        PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, activate, 0);
        alarams = (AlarmManager) getSystemService(this.ALARM_SERVICE);
        alarams.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), alarmIntent);

I tried using the above code to set the alarm but am not able to. I dont get any error either :(

like image 230
Harsha M V Avatar asked May 14 '11 10:05

Harsha M V


People also ask

Is there an app where you can send an alarm to someone?

Collaborate better with Galarm Being available for Android and iOS Phone makes the app really accessible so that everybody can enjoy its features and take care of their loved ones in a reliable and simple way.

How does an application get access to the alarm manager?

How does an application get access to the AlarmManager? Use the AlarmManager() constructor to create an instance of the AlarmManager. Use the AlarmManager. newInstance() method to retrieve the singleton instance of the AlarmManager.

Where is the alarm on this phone?

To set an alarm on Android, first open the Clock app. If it's not already on your homescreen, you can find it by swiping up from the bottom of the screen and going through your App menu. 1. Tap on the "ALARM" tab at the top-left of the Clock app.


1 Answers

As @stealthcopter said, the AlarmManager is used to raise an Alarm your application can catch and then do something. Here is a little example I threw together from other posts, tutorials, and work I've done.

Main.java

Intent i = new Intent(this, OnAlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i,
                                                     PendingIntent.FLAG_ONE_SHOT);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) + 10);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);

OnAlarmReceiver.java

public class OnAlarmReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    WakeIntentService.acquireStaticLock(context);
    Intent i = new Intent(context, AlarmService.class);
    context.startService(i);
}}

WakeIntentService.java

public abstract class WakeIntentService extends IntentService {

    abstract void doReminderWork(Intent intent);

    public static final String LOCK_NAME_STATIC = "com.android.voodootv.static";
    private static PowerManager.WakeLock lockStatic = null;

    public static void acquireStaticLock(Context context) {
        getLock(context).acquire();
    }

    synchronized private static PowerManager.WakeLock getLock(Context context) {
        if (lockStatic == null) {
            PowerManager powManager = (PowerManager) context
                    .getSystemService(Context.POWER_SERVICE);
            lockStatic = powManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                    LOCK_NAME_STATIC);
            lockStatic.setReferenceCounted(true);
        }
        return (lockStatic);
    }

    public WakeIntentService(String name) {
        super(name);
    }

    @Override
    final protected void onHandleIntent(Intent intent) {
        try {
            doReminderWork(intent);
        } finally {
            getLock(this).release();
        }
    }}

AlarmService.java

public class AlarmService extends WakeIntentService {

    public AlarmService() {
        super("AlarmService");
    }

    @Override
    void doReminderWork(Intent intent) {
        NotificationManager manager = (NotificationManager)
                getSystemService(NOTIFICATION_SERVICE);
        Intent notificationIntent = new Intent(this, Main.class);
        PendingIntent pi = PendingIntent.getActivity(this, 0,
                notificationIntent, PendingIntent.FLAG_ONE_SHOT);
        Notification note = new Notification(R.drawable.icon, "Alarm",
                System.currentTimeMillis());
        note.setLatestEventInfo(this, "Title", "Text", pi);
        note.defaults |= Notification.DEFAULT_ALL;
        note.flags |= Notification.FLAG_AUTO_CANCEL;
        int id = 123456789;
        manager.notify(id, note);
    }
}

This example will create a notification on the status bar after 10 seconds.

Hope it helps.

Also First post here :)

Oh almost forgot,

AndroidManifest.xml

<receiver android:name="com.android.alarmmanagertest.OnAlarmReceiver" />
<service android:name="com.android.alarmmanagertest.AlarmService" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
like image 170
VoodooXTC Avatar answered Sep 19 '22 14:09

VoodooXTC