我被卡住了.当我的应用程序启动时,我想检查我之前设置的警报是否存在.如果没有,那么我想设置它.
我提到了这个解决方案.我试图匹配这样的意图:
Intent intent = new Intent();
intent.setAction("com.vit.upload");
PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_NO_CREATE);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.还有什么工作?
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);
}
Run Code Online (Sandbox Code Playgroud) 我正在检查AlarmManager是否已使用此答案设置了警报.
以下是我的代码段.
boolean alarmUp = (PendingIntent.getBroadcast(MainActivity.this, 0,
new Intent(MainActivity.this, AlarmReceiver.class), PendingIntent.FLAG_NO_CREATE) != null);
if (alarmUp) {
// alarm is set; do some stuff
}
Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
final PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10 * 1000, pendingIntent);
Run Code Online (Sandbox Code Playgroud)
但是,alarmUp始终设置为true.也就是说,无论我是否设置闹钟,每当我重新启动我的应用时,它都会告诉我这alarmUp是真的(我通过制作一个来检查它Toast).
请帮助我出错的地方.
我已经有一个每天都会发出警报的警报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)
Run Code Online (Sandbox Code Playgroud)
我正在使用Firebase 9.6.1.
更新:
public static void setAlarm(Context context, boolean isSet) {
try {
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
boolean isWorking = (PendingIntent.getBroadcast(context,
SettingsActivity.REQUEST_CODE, intent, PendingIntent.FLAG_NO_CREATE) != null); …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,提醒人们完成他们的任务.所以有一个PendingIntent,现在用户可以在他想要的时候删除警报.在这段代码中,只有一个PendingIntent用于多个用户警报,因此我对取消意图附加功能的特定警报感到困惑"pill".其余警报不应取消.我对这个问题一无所知.希望我很清楚.谢谢
Intent intent = new Intent(this, AlarmNotifyReceiver.class);
intent.putExtra("Name_pill", "pill");
sender = PendingIntent.getBroadcast(this,
DatabaseConstants.NOTIFICATION_ID + 1, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(), sender);
updateTheFlag(pillName[(pillName.length-1)]);
Run Code Online (Sandbox Code Playgroud) 如果,我的应用程序使用AlarmManager设置的警报将被清除
请告诉我如何检测它?而是如何设置我的警报,以便所有这些情况不会影响我的警报.
我有一个场景,我必须在特定时间使用 WorkManager 向用户发出通知。
我如何在特定时间安排工作,即使用户强制杀死应用程序,它也应该显示出来。或应用程序未运行。
我当前的代码如下:
Data d = new Data.Builder().putInt(IntentConstants.SCHEDULE_ID, scheduleData.getScheduleID()).build();
OneTimeWorkRequest compressionWork =
new OneTimeWorkRequest.Builder(ScheduleWorker.class)
.setInputData(d)
.build();
WorkManager.getInstance().enqueue(compressionWork);
Run Code Online (Sandbox Code Playgroud) 我有一个警报管理器,我想看看警报是否已经设置,以及是否显示了一个不同的警报对话框,如果尚未设置它.我找到了一些我被告知应该工作的代码,但它不是.此外,如果已设置警报,警报对话框应提供取消警报的选项,但也不起作用.这是我的代码:
boolean alarmUp = (PendingIntent.getBroadcast(Main.this, 1,
new Intent(Main.this, Alarm_Receiver.class),
PendingIntent.FLAG_NO_CREATE) != null);
if (alarmUp){
//Sets up the custom alert dialog layout gathers the selected time for the notifications to be set
LayoutInflater factory = LayoutInflater.from(this);
final View time_picker = factory.inflate(R.layout.dialog_layout2, null);
AlertDialog.Builder alertDialogBuilder2 = new AlertDialog.Builder(this);
alertDialogBuilder2.setView(time_picker);
alertDialogBuilder2.setTitle("Select Your Notification Time:");
alertDialogBuilder2
.setMessage("Please select the time when you want the notifications to appear on your phone each day. Please note: If your phone restarts or runs out of battery you …Run Code Online (Sandbox Code Playgroud)