Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么通知没有';我过了很长时间才露面_Android - Fatal编程技术网

Android 为什么通知没有';我过了很长时间才露面

Android 为什么通知没有';我过了很长时间才露面,android,Android,当我将提醒时间设置为几分钟时,会显示一条通知。但是,如果时间超过一小时,则不会显示通知 当我使用alarm.setRepeating时,间隔时间为24小时,工作正常,但我不希望用户提醒重复。 如何修复它 addrements.java Intent-nIntent=新的Intent(MainActivity.context,rementerreceiver.class); 第九条putExtra(“ID”,newID); putExtra(“title”,getString(R.string.r

当我将提醒时间设置为几分钟时,会显示一条通知。但是,如果时间超过一小时,则不会显示通知

当我使用
alarm.setRepeating
时,间隔时间为24小时,工作正常,但我不希望用户提醒重复。 如何修复它

addrements.java

Intent-nIntent=新的Intent(MainActivity.context,rementerreceiver.class);
第九条putExtra(“ID”,newID);
putExtra(“title”,getString(R.string.rementer));
第九条putExtra(“文本”,名称);
PendingEvent alarmIntent=PendingEvent.getBroadcast(MainActivity.context,0,nIntent,0);
AlarmManager报警=(AlarmManager)getSystemService(报警服务);
日期设置(日历秒,0);
alarm.set(AlarmManager.RTC_WAKEUP,date.getTimeInMillis(),alarmIntent);
提醒Receiver.java

@覆盖
公共void onReceive(上下文、意图){
int notificationId=intent.getIntExtra(“ID”,0);
字符串消息=intent.getStringExtra(“文本”);
String title=intent.getStringExtra(“title”);
Intent maintent=新的Intent(上下文,MainActivity.class);
PendingEvent contentIntent=PendingEvent.getActivity(上下文,0,mainIntent,0);
通知经理通知经理=
(NotificationManager)context.getSystemService(context.NOTIFICATION\u服务);
Notification.Builder=new Notification.Builder(上下文);
建筑商。设置小图标(R.drawable.finance43)
.setContentTitle(标题)
.setContentText(消息)
.setWhen(System.currentTimeMillis())
.setAutoCancel(真)
.setShowWhen(真)
.setContentIntent(contentIntent)
.setPriority(通知。优先级高)
.setCategory(通知.CATEGORY_消息);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.O){
字符串channelId=“提醒”;
NotificationChannel=新的NotificationChannel(信道ID,
context.getResources().getString(R.string.remementers),
通知经理(重要性高);
notificationManager.createNotificationChannel(频道);
builder.setChannelId(channelId);
}
notificationManager.notify(notificationId,builder.build());
}

您需要考虑以下几点:

1.您可能无意中取消了它
AlarmManager.set
的文档说明如下:

如果已经为相同的IntentSender安排了报警,则将首先取消之前的报警

这意味着,如果在设置报警后,您设置了另一个具有相同意图和待处理意图组合的报警,则上一个报警将被取消。确保您的意图是唯一的,除非您的意图是“替换”现有警报

2.这个警报不准确 使用
AlarmManager.set
AlarmManager.setInexactRepeating
方法以及更多方法配置不精确报警。不精确报警不一定会在您预期的准确时间触发。如文件所述,API 19级中引入了这种行为:

从API 19开始,传递给此方法的触发时间被视为不精确:在此时间之前不会发出警报,但可能会延迟一段时间并在稍后发出

如果要在您请求的时间触发警报,请使用
setExact

3.警报被系统取消 当系统关闭时,所有报警均被取消。换句话说,如果重新启动或关闭设备电源,警报也会被取消。一个例外是重复警报,一旦设备启动,它们都会触发

确保跟踪正在运行的警报,然后注册一个
BroadCastReceiver
,以监听系统发出的
android.intent.action.BOOT\u广播,并重新启动警报

4.设备处于空闲/打瞌睡模式 使用
set
设置报警将导致在设备处于“打瞌睡”/空闲状态时不会触发报警。如果可能,使用
setandallowhileidle
setExactandallowhileidle
(我认为是在API级别23中引入的)

5.更改设备时区/区域设置
这可能会在使用实时时钟(RTC)警报时导致意外结果,因为应用程序可能会很好地转换到其他地区。经过的实时警报比RTC警报的伸缩性好得多

您需要考虑以下几点:

1.您可能无意中取消了它
AlarmManager.set
的文档说明如下:

如果已经为相同的IntentSender安排了报警,则将首先取消之前的报警

这意味着,如果在设置报警后,您设置了另一个具有相同意图和待处理意图组合的报警,则上一个报警将被取消。确保您的意图是唯一的,除非您的意图是“替换”现有警报

2.这个警报不准确 使用
AlarmManager.set
AlarmManager.setInexactRepeating
方法以及更多方法配置不精确报警。不精确报警不一定会在您预期的准确时间触发。如文件所述,API 19级中引入了这种行为:

从API 19开始,传递给此方法的触发时间被视为不精确:在此时间之前不会发出警报,但可能会延迟一段时间并在稍后发出

如果您想在准确的时间触发报警,请使用
setExact