Articles of alarmmanager

如何使用Alarm Manager计划任务

我是Android新手。 我正在开发一个应用程序,我需要安排将来执行的任务。 我已经阅读了有关AlarmManager的内容,并了解到我们可以使用AlarmManager完成此任务。 任何人都可以告诉我一些教程或任何来源我在哪里可以得到的东西。

如何在Android中运行后台活动

在我的应用程序中,我需要在一定的时间间隔后向用户发送文本消息。 为此,我需要在后台运行消息发送代码。 我正在使用闹钟管理器在特定时间开始活动。怎么办? 还有另一种方法吗?

Android AlarmManager setExact()不准确

我需要每10分钟计划一次任务。 在Lollipop和更高版本中, setRepeating()是不精确的,我使用setExact()和(在警报触发时)我在10分钟内设置了新的确切警报。 private void setAlarm(long triggerTime, PendingIntent pendingIntent) { int ALARM_TYPE = AlarmManager.ELAPSED_REALTIME_WAKEUP; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { alarmManager.setExact(ALARM_TYPE, triggerTime, pendingIntent); } else { alarmManager.set(ALARM_TYPE, triggerTime, pendingIntent); } } triggerTime计算SystemClock.elapsedRealtime() + 600_000; 当警报响起时,首先我会计划新警报,然后才会执行我的计划任务。 setAlarm(); mySheduledTask; 我的清单中有WAKE_LOCK权限。 当我在Android 4上测试它时 – 它工作得很完美(偏差可能是12-15 毫秒 )。 但是当我在小米Redmi Note 3 Pro(5.1.1)上运行应用程序时 – 偏差可能长达15秒! 例如,我在我的日志文件中看到:第一次运行是在1467119934477(RTC时间),第二次是在1467120541683.差异是607_206毫秒,而不是600_000 ,因为它是计划好的! 我错过了什么? 什么是模拟系统警报行为的方法(它是可以描述我的大头钉的最接近的用例)? PS。 我使用IntentService […]

如何在android中停止警报

在我的主要活动中有一个按钮。 在它的onclick监听器我调用function来设置闹钟。闹钟正在工作,但我无法阻止它。可以帮助我一些人 MainActivity.java public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { setalarm(); } }); } private void setalarm() { Calendar cal=Calendar.getInstance(); // cal.set(Calendar.MONTH,6); // cal.set(Calendar.YEAR,2013); // cal.set(Calendar.DAY_OF_MONTH,12); cal.set(Calendar.HOUR_OF_DAY,18); cal.set(Calendar.MINUTE,32); Intent intent = new Intent(this, Mote.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 1253, […]

android如何比较未决意图

PendingIntent.FLAG_NO_CREATE的文档内容如下: 指示如果描述的PendingIntent尚不存在的标志,则只返回null而不是创建它。 我的问题:用什么标准来比较PendingIntents? 我猜这个标志使用了PendingIntent.equals ,但是我不确定该函数使用的是什么标准。 它是使用动作,requestCode,类别,额外(我猜不是)等? 语境: 如果我的警报尚未设置,我想以待定意图启动警报。 具体来说,我正在听这个答案 。 Intent i = new Intent(applicationContext, MyService.class); i.setAction(“myAction”); PendingIntent pi = PendingIntent.getService(applicationContext, /*requestCode*/0, i, PendingIntent.FLAG_NO_CREATE); if (pi != null) { AlarmManager alarmMgr = (AlarmManager)applicationContext.getSystemService(Context.AlarmService); alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, AlarmManager.INTERVAL_HOUR, AlarmManager.INTERVAL_HOUR, pi); }

AlarmManager无法正常工作

我需要在10秒后启动活动AlarmReceiver (例如)。 我需要在不运行应用程序的情况下激活它。 但无论应用程序是否运行, AlarmReceiver都不会被调用。 有什么建议么? Intent intent = new Intent(this, AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 111, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); //alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() //+ (10 * 1000), pendingIntent); Toast.makeText(this, “Alarm set”, Toast.LENGTH_LONG).show();

停止Android alarmmanager的setrepeat

我已经创建了警报,如下所示 Intent intent = new Intent(this, Areceiver.class); PendingIntent sender = PendingIntent.getBroadcast(this, 1234567, intent, 0); AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.RTC_WAKEUP, timenow, 3000, sender); 我创建了一个按钮来停止闹钟。 在onclick方法中,我编写了以下代码 Intent intentstop = new Intent(this, Areceiver.class); PendingIntent senderstop = PendingIntent.getBroadcast(this, 0, intentstop, 0); AlarmManager alarmManagerstop = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManagerstop.cancel(senderstop); 但工作并没有停止。 可能是什么问题?

AlarmManager在错误的时间触发警报

我管理一切都可以创建一个通知服务,用于通过警报触发通知。 不幸的是,使用AlarmManager设置警报不能正常工作。 它会在几分钟后发射(不完全是几小时,这表明存在时区问题)。 循环周期为1周,因此我使用常数INTERVAL_DAY并将其乘以7.为了确保一个PendingIntent不替换另一个,我将dayOfWeek作为第二个parameter passing给PendingIntent.getService()。 我通过记录来检查警报触发时间的正确性: Log.d(TAG, “next alarm ” + df.format(cal.getTime())); 是否真的没有办法列出所有警报集 – 至少是我自己的应用程序? 我相信这是追踪错误的唯一方法。 我的代码: cal.setTimeInMillis(System.currentTimeMillis()); cal.add(Calendar.DATE, 1); cal.set(Calendar.HOUR_OF_DAY, hour); cal.set(Calendar.MINUTE, minute); Log.d(TAG, “next alarm ” + df.format(cal.getTime())); Intent showNotificationIntent = new Intent(context, NotificationService.class); dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); alarmIntent = PendingIntent.getService(context, dayOfWeek, showNotificationIntent, 0); getAlarmManager(context).setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), INTERVAL_WEEK, alarmIntent); 我想提供每天报警,但在不同的时间,可以由用户设置。 所以我最多使用7个警报,每周应该发射一次。 即使在阅读了类似问题的大量答案之后(我不打算创建一个重复的问题),我也没有设法find问题。

是否可以使用相同的requestCode和不同的附加function创建多个PendingIntents?

我正在使用AlarmManager来安排1到35个警报之间的任何位置(取决于用户输入)。 当用户请求安排新警报时,我需要取消当前警报,因此我使用在finalvariables中定义的相同requestCode创建所有警报。 // clear remaining alarms Intent intentstop = new Intent(this, NDService.class); PendingIntent senderstop = PendingIntent.getService(this, NODIR_REQUESTCODE, intentstop, 0); am.cancel(senderstop); // loop through days if (sched_slider.getBooleanValue()) for (int day = 1; day < 8; day++) { if (day == 1 && sun.isChecked()) scheduleDay(day); if (day == 2 && mon.isChecked()) scheduleDay(day); if (day == 3 && […]

如何设置重复的AlarmManager以每天执行代码

我目前正在尝试编写警报管理器,它将在每天指定的时间段内发出警报。 首先,我检查用户是否为当天设置了警报: if ((User.getReminderTime(Home.this) > 0) && (dt.getDate() != today.getDate() || dt.getDay() != today .getDay())) { AppointmentManager.setFutureAppointmentCheck(this .getApplicationContext()); User.setLongSetting(this, “futureappts”, today.getTime()); } 然后我去设置实际的闹钟在第二天的12点到12点10分之间: public static void setFutureAppointmentCheck(Context con) { AlarmManager am = (AlarmManager) con .getSystemService(Context.ALARM_SERVICE); Date futureDate = new Date(new Date().getTime() + 86400000); Random generator = new Random(); futureDate.setHours(0); futureDate.setMinutes(generator.nextInt(10)); futureDate.setSeconds(0); Intent intent = new […]