Set an alarm from my application

I want to create an alarm object from my application. I am writing a To-Do application that will be able to set an alarm on the phone.

I want to set the date and time, as well as 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 an alarm, but I can’t. I also do not get any errors :(

+6
source share
2 answers

As @stealthcopter said, AlarmManager is used to raise an Alarm that your application can catch and then do something. Here is a small example that I have compiled from other posts, tutorials, and work that I have 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 in the status bar after 10 seconds.

Hope this helps.

Also the 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" /> 
+12
source

This is the working code:

Add to Manifest.xml:

 ... <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> ... <receiver android:process=":remote" android:name="Alarm"></receiver> ... 

the code:

 public class Alarm extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); wl.acquire(); Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); wl.release(); } public void SetAlarm(Context context) { AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(context, Alarm.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); } public void CancelAlarm(Context context) { Intent intent = new Intent(context, Alarm.class); PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(sender); } } 
0
source

Source: https://habr.com/ru/post/888097/


All Articles