栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

创建带图片的Notification

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

创建带图片的Notification

1、定义变量,并生成数据

package com.example.mynotification

import android.app.NotificationManager
import androidx.core.app.NotificationCompat

object InboxStyleMockData {
    const val mContentTitle = "5 new emails"
    const val mContentText = "from Jane, Jay, Alex +2 more"
    const val mNumberOfNewEmails = 5
    const val mPriority = NotificationCompat.PRIORITY_DEFAULT

    const val mBigContentTitle = "5 new emails from Jane, Jay, Alex +2"
    const val mSummaryText = "New emails"

    fun mIndividualEmailSummary() : ArrayList{
        val list = ArrayList()

        list.add("Jane Faab - Launch Party is here ...")
        list.add("Jay Walker - There's a turtle on the server!")
        list.add("Alex Chang - Check this out ...")
        list.add("Jane Johns- Check in code?")
        list.add("John Smith - Movies later ...")

        return list
    }

    fun mParticipants() : ArrayList{
        val list = ArrayList()

        list.add("Jane Fabb")
        list.add("Jay Walker")
        list.add("Alex Chang")
        list.add("Jane Johns")
        list.add("John Smith")

        return list
    }

    const val mChannelId = "channel_email_1"
    const val mChannelName = "Sample Email"

    const val mChannelDescription = "Sample Email Notifications"
    const val mChannelImportance = NotificationManager.IMPORTANCE_DEFAULT
    const val mChannelEnableVibrate = true
    const val mChannelLockscreenVisibility = NotificationCompat.VISIBILITY_PRIVATE


}

2、创建channel id

fun createBigPictureStyleNotificationChannel(context: Context):String{

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            //The id of the channel
            val  channelId : String = BigPictureStyleMockData.mChannelId
            //The user-visible name of the channel
            val channelName : CharSequence = BigPictureStyleMockData.mChannelName
            val channelDescription : String = BigPictureStyleMockData.mChannelDescription
            val channelImportance : Int = BigPictureStyleMockData.mChannelImportance
            val channelEnableVibrate : Boolean = BigPictureStyleMockData.mChannelEnableVibrate
            val channelLockscreenVisibility : Int = BigPictureStyleMockData.mChannelLockscreenVisibility


            //Initializes NotificationChannel
            val notificationChannel = NotificationChannel(channelId,channelName,channelImportance)
            notificationChannel.description = channelDescription
            notificationChannel.enableVibration(channelEnableVibrate)
            notificationChannel.lockscreenVisibility = channelLockscreenVisibility

            //Adds NotificationChannel to system
            val notificationManager =
                context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            notificationManager.createNotificationChannel(notificationChannel)

            return channelId
        }else{
            return ""
        }
    }

3、创建notification id和notification manager

 private val NOTIFICATION_BIG_IMAGE_ID = 889
 private lateinit var mNotificationManagerCompat: NotificationManagerCompat


  mNotificationManagerCompat = NotificationManagerCompat.from(this@MainActivity)

4、创建big picture notification

        val notificationChannelId : String =
            NotificationUtil().createInboxStyleNotificationChannel(this)

        val inboxStyle =
            NotificationCompat.InboxStyle() //This title is slightly different than regular title
                .setBigContentTitle(InboxStyleMockData.mBigContentTitle) //available
                .setSummaryText(InboxStyleMockData.mSummaryText)

        for(summary in InboxStyleMockData.mIndividualEmailSummary()){
            inboxStyle.addLine(summary)
        }

        val mainIntent = Intent(this,MainActivity::class.java)

        val mainPendingIntent = PendingIntent.getActivity(
            this,
            0,
            mainIntent,
            PendingIntent.FLAG_CANCEL_CURRENT
        )

        val notificationCompatBuilder = NotificationCompat.Builder(
            applicationContext,
            notificationChannelId
        )

        notificationCompatBuilder.setStyle(inboxStyle)
            .setContentTitle(InboxStyleMockData.mBigContentTitle)
            .setContentText(InboxStyleMockData.mContentText)
            .setSmallIcon(R.drawable.ic_start_notification)
            .setLargeIcon(
                BitmapFactory.decodeResource(
                    resources,
                    R.drawable.ic_person
                )
            )
            .setContentIntent(mainPendingIntent)
            .setDefaults(NotificationCompat.DEFAULT_ALL)
            .setColor(
                ContextCompat.getColor(
                    applicationContext,
                    R.color.purple_500
                )
            )
            .setSubText(InboxStyleMockData.mNumberOfNewEmails.toString())
            .setCategory(Notification.CATEGORY_EMAIL)
            .setPriority(InboxStyleMockData.mPriority)
            .setVisibility(InboxStyleMockData.mChannelLockscreenVisibility)

         for(name in InboxStyleMockData.mParticipants()){
             notificationCompatBuilder.addPerson(name)
         }

        val notification = notificationCompatBuilder.build()
        mNotificationManagerCompat.notify(NOTIFICATION_ID,notification)

    

运行结果:

点击按钮,弹出小弹框

 

打开通知栏,出现带图片的notification

点击notification回到主界面

 

注:

NotificationUtils代码:

package com.example.mynotification

import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.os.Build

class NotificationUtil {

    fun createInboxStyleNotificationChannel(context: Context):String{

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            //The id of the channel
            val  channelId : String = InboxStyleMockData.mChannelId
            //The user-visible name of the channel
            val channelName : CharSequence = InboxStyleMockData.mChannelName
            val channelDescription : String = InboxStyleMockData.mChannelDescription
            val channelImportance : Int = InboxStyleMockData.mChannelImportance
            val channelEnableVibrate : Boolean = InboxStyleMockData.mChannelEnableVibrate
            val channelLockscreenVisibility : Int = InboxStyleMockData.mChannelLockscreenVisibility


            //Initializes NotificationChannel
            val notificationChannel = NotificationChannel(channelId,channelName,channelImportance)
            notificationChannel.description = channelDescription
            notificationChannel.enableVibration(channelEnableVibrate)
            notificationChannel.lockscreenVisibility = channelLockscreenVisibility

            //Adds NotificationChannel to system
            val notificationManager =
                context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
                notificationManager.createNotificationChannel(notificationChannel)

            return channelId
        }else{
            return ""
        }
    }


    fun createBigPictureStyleNotificationChannel(context: Context):String{

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            //The id of the channel
            val  channelId : String = BigPictureStyleMockData.mChannelId
            //The user-visible name of the channel
            val channelName : CharSequence = BigPictureStyleMockData.mChannelName
            val channelDescription : String = BigPictureStyleMockData.mChannelDescription
            val channelImportance : Int = BigPictureStyleMockData.mChannelImportance
            val channelEnableVibrate : Boolean = BigPictureStyleMockData.mChannelEnableVibrate
            val channelLockscreenVisibility : Int = BigPictureStyleMockData.mChannelLockscreenVisibility


            //Initializes NotificationChannel
            val notificationChannel = NotificationChannel(channelId,channelName,channelImportance)
            notificationChannel.description = channelDescription
            notificationChannel.enableVibration(channelEnableVibrate)
            notificationChannel.lockscreenVisibility = channelLockscreenVisibility

            //Adds NotificationChannel to system
            val notificationManager =
                context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            notificationManager.createNotificationChannel(notificationChannel)

            return channelId
        }else{
            return ""
        }
    }

}

 MainActivity代码

package com.example.mynotification

import android.app.Notification
import android.app.PendingIntent
import android.content.Intent
import android.graphics.BitmapFactory
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat

class MainActivity : AppCompatActivity(), View.OnClickListener {

    private val NOTIFICATION_ID = 888
    private val NOTIFICATION_BIG_IMAGE_ID = 889
    private lateinit var mNotificationManagerCompat: NotificationManagerCompat

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mNotificationManagerCompat = NotificationManagerCompat.from(this@MainActivity)

        val btnInboxStyleNotification = findViewById

MainActivity布局文件:




    

    


    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872658.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号