Articles of android alarms

Firebase发出太多警报

我已经有一个每日触发的警报,它有FLAG_UPDATE_CURRENT 。 这是开发人员控制台的日志。 java.lang.SecurityException: !@Too many alarms (500) registered from pid 32326 uid 10206 at android.os.Parcel.readException(Parcel.java:1540) at android.os.Parcel.readException(Parcel.java:1493) at android.app.IAlarmManager$Stub$Proxy.set(IAlarmManager.java:206) at android.app.AlarmManager.setImpl(AlarmManager.java:428) at android.app.AlarmManager.set(AlarmManager.java:215) at com.google.firebase.iid.FirebaseInstanceIdService.zzagl(Unknown Source) at com.google.firebase.iid.FirebaseInstanceIdService.zzd(Unknown Source) at com.google.firebase.iid.FirebaseInstanceIdService.zza(Unknown Source) at com.google.firebase.iid.FirebaseInstanceIdService.zzm(Unknown Source) at com.google.firebase.iid.zzb$2.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) 我使用的是Firebase 9.6.1 。 更新: public static void setAlarm(Context context, boolean […]

在Android 6.0上,Alarm Manager无法在后台运行

这是我的Activity代码, Long time = new GregorianCalendar().getTimeInMillis()+20000;//Setting alarm after 20 sec Intent intentAlarm = new Intent(“alarm”); intentAlarm.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intentAlarm.putExtra(“req_code”,10); PendingIntent pendingIntent = PendingIntent.getBroadcast(context,10, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent); 这些是我在我的应用中拥有的所有权限, 这是我的BroadcastReceiver代码, @Override public void onReceive(Context context, Intent intent) { SharedPreferences sharedPreferences = context.getSharedPreferences( “mydata”, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putBoolean(“elligible”,true); editor.apply(); } 我在清单中注册了我的BroadcastReceiver […]

从Android 4.4 Kitkat设置闹钟

在Android 4.4 API页面中,我读到: 将应用程序的targetSdkVersion设置为“19”或更高时,使用set()或setRepeating()创建的警报将不准确。 [切] 这种不精确的批处理行为仅适用于更新的应用程序。 如果您已将targetSdkVersion设置为“18”或更低,则在Android 4.4上运行时,您的警报将继续像以前的版本一样运行。 在我的应用程序中,我需要准确的时间警报,我将targetSdkVersion更新为“19”。 以下代码是否正确? 另外,如果我在手机中将targetSdkVersion设置为“19”并使用以前的版本,那么“旧”方法AlarmManager.set是否会以相同的方式继续工作? private void setAlarm (long ms){ final AlarmManager am = (AlarmManager) mCtx.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(this, BroadcastReceiverAlarm.class); PendingIntent pi = PendingIntent.getBroadcast(this, ALARM_REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT); if (Build.VERSION.SDK_INT<Build.VERSION_CODES.KITKAT) { am.set(AlarmManager.RTC, ms, pi); } else { setAlarmFromKitkat(am, ms, pi); } } @TargetApi(19) private void setAlarmFromKitkat(AlarmManager am, long […]

Android Galaxy S4 – 在锁定屏幕上可见的活动

几年前,我写了一个适用于Android 2的闹钟应用程序,我现在正尝试将其升级到适用于Android 4.的function,特别是在三星Galaxy S4上。 在Android 2上,如果手机正在睡眠,它会唤醒手机并在锁定屏幕上显示“暂停或关闭”屏幕。 在Android 4上,它会唤醒手机,但您必须将其解锁,然后打开通知区域,然后单击闹钟的通知,然后才能点击“关闭”。 我一直在使用这段代码来唤醒: getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 关于此事,我已经阅读了8个不同的stackoverflow问题。 他们中的大多数都给出了上面的代码,这在几年前在Android 2中起作用,但在Android 4中不起作用。但是他们都没有帮助我解决这个问题。 以下是我阅读和尝试过的问题: Android:以编程方式删除或禁用Samsung Galaxy S2设备上的锁定屏幕 如何显示全屏TYPE_SYSTEM_ALERT窗口? 如何创建在锁定屏幕顶部可见的活动 如何在不解锁屏幕的情况下启动可以单击的对话框(如闹钟dimiss / snooze) Android活动超过默认锁定屏幕 Android设备已锁定,但希望报警声音和对话框出现 锁定屏幕上的Android对话框 在Android 2.3中通过锁屏显示触摸事件的对话框 有没有人对Android 4中可能导致这种情况发生了哪些变化有任何想法? 编辑:这是我见过的一个最简单的例子,它没有出现“最小化”的警报对话框。 它没有像写的那样出现在锁屏上,但你可以使用WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED修复它。 http://wptrafficanalyzer.in/blog/setting-up-alarm-using-alarmmanager-and-waking-up-screen-and-unlocking-keypad-on-alarm-goes-off-in-android/ 它是用FragmentActivity和DialogFragment编写的,但它仍然可以作为Activity使用。 它使用AlertDialog.Builder来创建对话框,如果您尝试使用XML布局,它将无法工作。 为什么?

如何在Android 4.4中设置准确,重复的警报?

现在,我正在设置这样的警报: AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); timedate = cal.getTime(); //convert date to milis long timeInMilis = (timedate.getTime()); //Set Alarm to Repeat manager.setRepeating(AlarmManager.RTC_WAKEUP, timeInMilis, interval, pendingIntent); 不幸的是,重复的预定时间是不准确的,我读到它们可能是完全间隔的不精确! 所以,我想切换到设置一个确切的重复警报。 我的设备至少需要最新的API 19 / Android 4.4,因此我无法使用setRepeating。 我该怎么做才能设置一个精确的重复警报?

如何在重新启动后创建持久警报

目前,我正在开发类似“待办事项列表”的应用程序。 我已在我的应用程序中成功实现了NotificationService和SchedularService。 此外,我在为任务设置的时间收到警报(通知)。 以下是我的疑问: 使用此代码,重启后我的警报会被删除吗? 如果是的话,如何克服这一点。 我保留了任务的优先级function。 但是我想要这样的机制,如果用户选择优先级“高”,那么他应该在30分钟之前,15分钟之前和设定的时间之前接收三次通知。 怎么做到这一点? 我想在引发通知时设置手机的振动function。 怎么做到这一点? 我想知道,NotifyService.java中已弃用的方法和构造函数可以做些什么。 在API级别11中不推荐使用这些: Notification notification = new Notification(icon, text, time); 和notification.setLatestEventInfo(this, title, text, contentIntent); 。 在developer.android.com上,他们建议使用Notification.Builder 。 那么如何使我的应用程序与所有API级别兼容。 这是用于安排警报的代码段: … scheduleClient.setAlarmForNotification(c, tmp_task_id); … 这是ScheduleClient.java类: public class ScheduleClient { private ScheduleService mBoundService; private Context mContext; private boolean mIsBound; public ScheduleClient(Context context) { mContext = context; } […]

闹钟应用程序源代码

有没有办法获取Alarm Application源代码,以自定义Android 2.3可用的现有默认源代码。

如果重启设备,请启动AlarmManager

在我的应用程序中,我想使用AlarmManager在特定时间每天运行一些代码。 在android文档中我发现了这个: 设备处于睡眠状态时会保留已注册的警报,但如果关闭并重新启动则会清除。 这就是问题所在。 即使用户重新启动手机,我也想运行代码。 如果用户重新启动手机,他目前必须重新启动我的应用以再次启动闹钟。 我怎么能阻止这个? 我应该使用更好的机制吗?

识别并取消发送到AlarmManager的警报

如果我使用AlarmManager来安排警报(应该发送的PendintIntent),我如何在以后识别该警报以取消它? 我可以取消我的应用安排的所有闹钟吗?

AlarmManager的setRepeating和setInexactRepeating之间的区别

以下参数是什么: alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, alarmIntent); 以下内容: alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent); 有什么区别,两者在function方面有何不同?