Oreo - Foreground service does not show foreground notification

后端 未结 3 523
醉酒成梦
醉酒成梦 2021-01-31 17:37

So far, I\'ve adjsuted my code to use ContextCompat.startForegroundService(context, intentService); to start my service. This way, it works on android < 26 and o

相关标签:
3条回答
  • 2021-01-31 18:06
      // Since android Oreo notification channel is needed.
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    NotificationChannel channel = new NotificationChannel(channelId,
                            getString(R.string.app_name),
                            NotificationManager.IMPORTANCE_HIGH);
    
                    AudioAttributes attributes = new AudioAttributes.Builder()
                            .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                            .build();
    
    
                    channel.setDescription(data.get("body"));
                    channel.enableLights(true);
                    channel.enableVibration(true);
                    channel.setSound(SoundUri, attributes); // This is IMPORTANT
    
                    notificationManager.createNotificationChannel(channel);
    
    
                }
    
    0 讨论(0)
  • 2021-01-31 18:09

    Code in kotlin

     private fun customNotification(title: String,notificationID: Int) {
    
                    val intent = Intent(this, MainActivity::class.java)
                    val pendingIntent = PendingIntent.getActivity(this, 0 /* request code */, intent, PendingIntent.FLAG_UPDATE_CURRENT)
    
    
                    val builder = NotificationCompat.Builder(this, title)
                    .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                    .setContentText("Notification description")
                            .setSmallIcon(R.drawable.ic_mark_map)
                            .setContentIntent(pendingIntent)
                            .setOnlyAlertOnce(true)
    
                    val mNotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                        val channel = NotificationChannel(title,
                                "Channel human readable title",
                                NotificationManager.IMPORTANCE_DEFAULT)
                        mNotificationManager.createNotificationChannel(channel)
                    }
    
                     val notification = builder.build()
                     startForeground(notificationID, notification)
                }
    

    Use:

     customNotification("Title",101)
    
    0 讨论(0)
  • 2021-01-31 18:28

    You may need to define Notification Channel for your app. Check the log, there should be warning. Check this for introduction

    I'll give you some example, it would be in kotin. First, make a class like this. You'll need to call createMainNotificationChannel() once at the start of your application.

    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)
        }
    }
    

    Then you can use util like this

    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)
        }
    }
    
    0 讨论(0)
提交回复
热议问题