Tag: android alarms

为什么我的报警是递归设置的?

我的数据库中有两个值: 小时= 10 分钟= 20 编辑: 通过Recursive我不是说明天就会设置闹钟,因此我的Alarm类的onReceive会被递归调用。 我有以下function使用数据库中的上述值设置和报警。 public void SetAlarm(Context context){ retrieve(context); // returns the hour, minute and day value. Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); Calendar calendarNow = Calendar.getInstance(); calendarNow.setTimeInMillis(System.currentTimeMillis()); //Now calendar calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(timeOneHour)); calendar.set(Calendar.MINUTE,Integer.valueOf(timeOneMinute) ); calendar.set(Calendar.SECOND, 00); if(calendar.after(calendarNow)){ calendar.set(Calendar.DAY_OF_MONTH, (calendar.get(Calendar.DAY_OF_MONTH))); }else{ calendar.set(Calendar.DAY_OF_MONTH, (calendar.get(Calendar.DAY_OF_MONTH+1))); } AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(context, NotificationsEngine.class); PendingIntent […]

每天凌晨5点发出警报

我正在开发一个Android应用程序,我需要每天早上5点触发警报。 我已经使用了Intent的概念(下面是代码)并将AlarmManager放入Service 。 但我没有从两个实现中获得问题解决方案。 我只是在寻找一个完美的解决方案。 如果我第一次打开应用程序时,我会在calendar添加提醒1个月,我想这可能会有效。 但如果有更好的解决方案,请提供。 无论如何,它应该每天凌晨5点触发警报。 我怎样才能做到这一点? alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); Intent alarmIntent = new Intent(this, MyStartServiceReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 100, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 5); calendar.set(Calendar.MINUTE, 5); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.AM_PM, Calendar.AM); if (System.currentTimeMillis() > calendar.getTimeInMillis()) { calendar.add(Calendar.DAY_OF_MONTH, 1); } alarmManager.cancel(pendingIntent); alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

安排将来要执行的事件(Android方式的Cron Job)

我有一些曾经失去相关性的日期,并且应该计算DB中这些字段的新日期,我知道我可以利用AlarmManager类,但是我对此有一些担忧: 1)注意:从API 19(KITKAT)开始,警报传递不准确:操作系统将移动警报以最小化唤醒和电池使用。 有新的API支持需要严格交付保证的应用程序; 请参阅setWindow(int,long,long,PendingIntent)和setExact(int,long,PendingIntent)。 targetSdkVersion早于API 19的应用程序将继续查看先前在请求时准确传递所有警报的行为。 那么我是否需要单独编写这两种情况的代码,或者如果我的目标是kitkat,那么它也适用于旧版本吗? 此外,由于我的代码执行时间紧迫,比如在某个日期的午夜12点之后,我的数据失去了相关性,如何克服警报的转移。 2)在设备处于hibernate状态时保留已注册的警报(如果设备在此期间关闭,可以选择将设备唤醒),但如果设备关闭并重新启动,则会清除设备。 2.1)在应用程序的清单中设置RECEIVE_BOOT_COMPLETED权限。 这允许您的应用程序接收系统完成引导后广播的ACTION_BOOT_COMPLETED (仅当用户已经至少一次启动应用程序时才有效) 2.1.1)如果我在12处设置了警报,则与此警报相关的服务将在12时触发,现在当我重新启动设备时,“12”时间已经过去,警报将立即再次触发并且服务会再次被召唤? 在重启时我需要实现什么机制才能在特定时间坚持我的代码执行策略? 如果用户未启动我的应用,如何设置闹钟? 第三件事是,如果我的应用程序被卸载,我想清除我的代码设置的所有警报,我如何在卸载应用程序时收听? 另外我想知道,我的应用程序非常关键,我的数据库中的值每晚12点都会过时,而我正在更新应用程序,如果用户选择在12时使用我的应用程序,结果会是什么使用服务来更新它并在后台运行? 编辑:到目前为止我尝试过: 我有一个数据库,其中记录在午夜过时,在12:00时说得很清楚。 我调用了一个警报管理器(在一个测试项目中,因为我喜欢隔离问题代码)来启动服务。 我还在设备上获得了PARTIAL_WAKE_LOCK,以便正确完成我庞大的数据库操作。 我还实现了一个线程来完成我耗时的任务。 以下是我的MainActivity类,我在12处调用它来启动警报(随机时间用于测试目的): public class MainActivity extends Activity { private AlarmManager alarmMgr; private PendingIntent alarmIntent; BroadcastReceiver br; TextView t; int sum; public void setSum(int s){ sum = s; // t = (TextView)findViewById(R.id.textView1); // t.setText(sum); […]

上下文无法解决

我正在尝试使用一种方法来安排此处描述的月度警报: 如何实施年度和月度重复警报? 但是我在线上遇到两个错误: AlarmManager am = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); 和 PendingIntent sender = PendingIntent.getBroadcast(context, 声明“上下文无法解决”和“上下文无法解析为变量” …关于如何解决这个问题的任何建议? public class Alarm extends Service { // compat to support older devices @Override public void onStart(Intent intent, int startId) { onStartCommand(intent, 0, startId); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // your method to check […]

我可以在Android中设置AlarmManager的结束时间吗?

我已经设置一个AlarmManager在特定时间关闭,然后间隔重复。 是否可以在停止多少个间隔后告诉它? 甚至在什么时候停下来? 这是我到目前为止: Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, 13); calendar.set(Calendar.MINUTE, 56); Intent intent = new Intent(this, MyService.class); alarmIntent = PendingIntent.getService(this, 0, intent, 0); alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60, alarmIntent); 我是否还需要做任何事情以确保它每天都会消失? 或者它已经这样做了?

如何获取Android手机中的闹钟数?

我正在尝试使用以下代码来获取当前在手机上设置的警报数量。 Uri uri = Uri.parse(“content://com.android.deskclock/AlarmClock”); Cursor c = getApplicationContext().getContentResolver().query(uri, null, null, null,null); 但是当我尝试使用获取数字时,我得到一个NullPointerException int num = c.getCount(); System.out.println(“No of alarms : “+c.getCount()); 请让我知道我做错了什么? getCount()本身发生exception,因此我无法显示警报的数量。 编辑:我也在我的LogCat上收到此消息: ActivityThread(13290): Failed to find provider info for com.android.deskclock

如何在应用程序外部显示AlertDialog框?

@Override public void run() { //Create thread that can alter the UI AlarmPage.this.runOnUiThread(new Runnable() { public void run() { cal = Calendar.getInstance(); //See if current time matches set alarm time if((cal.get(Calendar.HOUR_OF_DAY) == alarmTime.getCurrentHour()) && (cal.get(Calendar.MINUTE) == alarmTime.getCurrentMinute())){ //If the sound is playing, stop it and rewind if(sound.isPlaying()){ ShowDialog(); alarmTimer.cancel(); alarmTask.cancel(); alarmTask = new PlaySoundTask(); alarmTimer […]