奥利奥 – 前台服务不显示前台通知

到目前为止,我已经修改了我的代码来使用ContextCompat.startForegroundService(context, intentService); 开始我的服务。 这样,它也可以在android <26和android 26(奥利奥)上运行。

我仍然看到一个区别,在Android奥多我没有看到我的自定义前景通知(我只看到“应用程序在后台运行”通知)。 我还需要调整什么吗?

我的服务如下所示:

 public class BaseOverlayService extends Service { @Override public void onCreate() { super.onCreate(); moveToForeground(); } private void moveToForeground() { Notification notification = ...; super.startForeground(NOTIFICATION_ID, notification); } } 

官方的例子

这个例子( https://github.com/googlesamples/android-play-location/blob/master/LocationUpdatesForegroundService/app/src/main/java/com/google/android/gms/location/sample/locationupdatesforegroundservice/LocationUpdatesService.java #L200 )显示为评论,我应该使用以下,但startServiceInForeground不存在…

 if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) { NotificationManager mNotificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)); mNotificationManager.startServiceInForeground(new Intent(this, BaseOverlayService.class), NOTIFICATION_ID, notification); } else { startForeground(NOTIFICATION_ID, notification); } 

编辑

我的通知是这样创build的,目前正在使用API​​ <26的数以千计的Android设备工作:

 protected Notification foregroundNotification(int notificationId) { boolean paused = MainApp.getPrefs().sidebarServicePaused(); NotificationCompat.Builder builder = new NotificationCompat.Builder(this); builder.setSmallIcon(R.drawable.icon_not); builder.setContentIntent(notificationIntent()); builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.icon)); builder.setContentTitle(getString(R.string.derived_app_name)); builder.setContentText(getString(checkStatus() ? (paused ? R.string.service_notification_text_paused : R.string.service_notification_text_running) : R.string.service_notification_text_preparing)); builder.setColor(Color.parseColor("#25baa2")); if (MainApp.getPrefs().hideNotificationIcon()) builder.setPriority(NotificationCompat.PRIORITY_MIN); else builder.setPriority(NotificationCompat.PRIORITY_MAX); if (paused) builder.addAction(R.drawable.ic_play_arrow_black_24dp, getString(R.string.resume), resumeIntent(this)); else builder.addAction(R.drawable.ic_pause_black_24dp, getString(R.string.pause), pauseIntent(this)); return builder.build(); } 

Solutions Collecting From Web of "奥利奥 – 前台服务不显示前台通知"

您可能需要为您的应用定义通知频道。 检查日志,应该有警告。 检查这个介绍

我会举一些例子,这将在kotin。 首先,像这样做一个class级。 您需要在应用程序启动时调用createMainNotificationChannel()一次。

 class NotificationManager(private val context: Context) { companion object { private val CHANNEL_ID = "YOUR_CHANNEL_ID" private val CHANNEL_NAME = "Your human readable notification channel name" private val CHANNEL_DESCRIPTION = "description" } @RequiresApi(Build.VERSION_CODES.O) fun getMainNotificationId(): String { return CHANNEL_ID } @RequiresApi(Build.VERSION_CODES.O) fun createMainNotificationChannel() { val id = CHANNEL_ID val name = CHANNEL_NAME val description = CHANNEL_DESCRIPTION val importance = android.app.NotificationManager.IMPORTANCE_LOW val mChannel = NotificationChannel(id, name, importance) mChannel.description = description mChannel.enableLights(true) mChannel.lightColor = Color.RED mChannel.enableVibration(true) val mNotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager mNotificationManager.createNotificationChannel(mChannel) } } 

那么你可以像这样使用util

 fun createNotificationCompatBuilder(context: Context): NotificationCompat.Builder { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { return NotificationCompat.Builder(context, NotificationManager(context).mainNotificationId) } else { return NotificationCompat.Builder(context) } }