gpt4 book ai didi

java - 服务被销毁时如何创建通知

转载 作者:行者123 更新时间:2023-12-01 21:10:37 26 4
gpt4 key购买 nike

我正在尝试创建一个持续的通知,该通知将在服务被销毁时出现。当用户点击通知时,服务应该重新启动,并且在服务被销毁时创建的通知应该消失。
下面是我正在使用的代码

   private boolean mRunning;

@Override
public void onDestroy(){
super.onDestroy();
destroyed();
Toast.makeText(getApplicationContext(),"you are offline",Toast.LENGTH_SHORT).show();
}

private void destroyed() {
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
String Notichanid="com.g.kupa";
String channelname="My Background";
NotificationChannel chan=new NotificationChannel(Notichanid,channelname,NotificationManager.IMPORTANCE_HIGH);
chan.setLightColor(Color.BLUE);
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
NotificationManager manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
assert manager!=null;
manager.createNotificationChannel(chan);
Intent notificationintnet=new Intent(this,Profile.class);
notificationintnet.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent contentIntent=PendingIntent.getActivity(this,0,notificationintnet,0);
NotificationCompat.Builder notificationBuilder=new NotificationCompat.Builder(this,Notichanid);
Notification notification=notificationBuilder.setOngoing(false)
.setSmallIcon(R.drawable.menu_icon)
.setContentTitle("You are offline")
.setContentText("If you are awaiting one of your bookings to be accepted, tap this notification to get back online")
.setPriority(NotificationManager.IMPORTANCE_HIGH)
.setCategory(Notification.CATEGORY_SERVICE)
.setContentIntent(contentIntent)
.build();
manager.notify(19,notification);

if (!mRunning){
mRunning=true;
manager.cancel(19);
}

具有 if close 的代码的最后一部分是新增内容。如果没有 if 通知,通知会出现,但当服务重新启动时,它仍然存在。
但是,既然我已经添加了 if 语句来删除通知,那么当服务被销毁时,通知甚至都不会出现,有人可以帮忙吗?

最佳答案

好的。我发现 stopForeground函数具有标志的可选参数而不是 boolean 值。可以给它一个标志STOP_FOREGROUND_DETACH即使在调用 stopForeground 之后,也有必要从服务中分离通知这样当服务被销毁时,通知不会被关闭,并且不必构建新的通知。这是我用于启动通知的更新代码:

private fun updateNotification(preparing: Boolean = false) {
if(getPlaying()) {
startService(Intent(applicationContext, this@MediaPlayerService.javaClass))
startForeground(NOTIFICATION_ID, getNotification())
}else {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
stopForeground(Service.STOP_FOREGROUND_DETACH)
else
stopForeground(false)
notificationManager.notify(NOTIFICATION_ID, getNotification())
}
}

关于java - 服务被销毁时如何创建通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58904397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com