startForeground() 不显示任何通知
Posted
技术标签:
【中文标题】startForeground() 不显示任何通知【英文标题】:startForeground() doesn't show any notification 【发布时间】:2019-08-28 17:36:38 【问题描述】:我想启动一个后台服务,即使应用程序关闭,它仍然可以运行,
为此,我使服务启动变得有粘性,并使其成为一个过程。 问题仍然存在,所以我做了一些研究,发现在最近的 android 设备中,我们必须在前台启动此类服务: - 通过使用 startForegroundService 启动服务, - 和 Service 的 onStartCommand 中的 startForeground, - 显示具有恒定频道的通知。
我这样做了,但同样的问题,前台服务的通知没有显示,
我的服务的 onStartCommand :
@Override
public int onStartCommand(Intent intent, int flags, int startId)
super.onStartCommand(intent,flags,startId);
Intent intent2 = new Intent(this, RDVSearchService.class);
intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent2, 0);
Notification.Builder builder = new Notification.Builder(getApplicationContext())
.setContentTitle("Pratikk")
.setContentText("Subject")
.setSmallIcon(R.drawable.ok_done)
.setContentIntent(pendingIntent);
Notification notif;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
notif = builder.build();
else
notif = builder.getNotification();
startForeground(1234, notif);
return START_STICKY;
我是如何启动服务的:
Intent intent = new Intent(context, RDVSearchService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
context.startForegroundService(intent);
else
context.startService(intent);
我在 Manifest 中的服务声明:
<service
android:name=".services.RDVSearchService"
android:exported="false"
android:process=":rdv_search" />
【问题讨论】:
【参考方案1】:从android 8.0开始,必须创建频道。
String channelId = "channelId";
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), channelId)
.setContentTitle("Pratikk")
.setContentText("Subject")
.setSmallIcon(R.drawable.ok_done)
.setContentIntent(pendingIntent);
startForeground(1234, builder.build());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
NotificationChannel channel = new NotificationChannel(channelId,
"name", NotificationManager.IMPORTANCE_LOW);
channel.setDescription("description");
channel.enableLights(false); // light
channel.enableVibration(false); // vibration
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (manager != null)
manager.createNotificationChannel(channel);
【讨论】:
以上是关于startForeground() 不显示任何通知的主要内容,如果未能解决你的问题,请参考以下文章
如何在不显示通知的情况下 startForeground()?
startForeground 的错误通知:服务通知的通道无效
如何重用使用 startForeground 创建的通知中的***活动?
想要隐藏通知但获取 Context.startForegroundService() 并没有调用 Service.startForeground()
升级到 Android 8.1 后 startForeground 失败
权限拒绝:startForeground 需要 android.permission.FOREGROUND_SERVICE