当应用程序处于通知状态时处于后台状态时,我的应用程序即将到达前台,但此行为不会发生在已杀死状态。 这不会发生在oreo之下。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, getString(R.string.app_name), NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(mChannel);
}
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this,CHANNEL_ID)
.setSmallIcon(R.drawable.tracking_app_logo)
.setContentTitle(getString(R.string.app_name))
.setContentText("Uploading database...")
.setContentIntent(pendingIntent)
.setAutoCancel(false)
.setChannelId(CHANNEL_ID)
.setOngoing(true)
.setPriority(NotificationCompat.PRIORITY_HIGH);
startForeground(102, mBuilder.build());
答案 0 :(得分:1)
发生的事情是您在自己的活动上下文中创建通知,而不是从后台服务启动通知,因此如果您不杀死应用程序,您将能够看到通知,因为上下文是还活着,可以创建通知。
您应该使用AlarmManager
来安排通知,因为您在自己的活动环境中使用它,我建议您阅读有关AlarmManager
服务以及如何通过通知完成通知。< / p>
有关如何实现这一目标的好文章可以在这里找到 http://droidmentor.com/schedule-notifications-using-alarmmanager/
它是如何工作的基本:
首先设置后台服务,例如AlarmManager
,以便在后台启动应用的通知
AlarmManager
会为通知设置时间,即使应用程序被终止,它也会启动您的通知,因为AlarmManager
是在系统后台运行的服务。
另一个提示是将Firebase云消息服务与NotificationCompat结合使用;您只需在清单中实现此服务即可在后台运行通知
<service
android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
检查Firebase消息文档:https://firebase.google.com/docs/cloud-messaging/android/client
答案 1 :(得分:0)
很抱歉,如果你发现这个答案无关紧要,我发布了这个,因为我认为你正在使用推送通知,但现在我认为你正在申请中发出通知,让我知道我是否再次朝着错误的方向前进。 / p>
您可以通过以下方式在应用程序中生成通知。
闹钟管理器: 在此,您可以指定需要通知的时间,以便在满足要求时,您可以将广播传递给应用,以便触发事件
例如:https://developer.android.com/reference/android/app/AlarmManager
服务: 在此,您可以启动将在后台运行的粘性服务,当条件满足时,您的广播将被解雇,您可以显示您的通知
例如:https://developer.android.com/reference/android/app/Service
作业调度程序: 通过使用此功能,您还可以显示要显示的通知
例如:http://www.vogella.com/tutorials/AndroidTaskScheduling/article.html
如果您仍然遇到此问题,请浏览此链接: