温习Android基础知识——《第一行代码(第三版)》读书笔记 Chapter 9 通知&多媒体技术

第九章:丰富你的程序,运用手机多媒体

通知

当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。

通知渠道

虽然Android系统运行我们将某个应用程序的通知完全屏蔽,Android
8.0系统之前,用户无法对所有信息做出区分,要么同意接受所有信息,要么屏蔽所有信息。 而Android 8.0系统引入了通知渠道的概念。

每个应用程序都可以自由地创建当前应用拥有哪些通知渠道,但是这些通知渠道的控制权是掌握在用户手上的。用户可以自由地选择这些通知渠道的重要程度,是否响铃,是否振动,或者是否要关闭这个渠道的通知。

创建通知渠道

通知既可以在Activity中创建,也可以在BroadcastReceiver里创建,还可以在Service里创建。
创建通知渠道的代码只在第一次执行的时候才会创建,下次在执行创建代码时,系统会检测到该通知渠道已经存在了,因此不会重复创建,也不会影响运行效率。注意,通知渠道一旦创建就不能在通过代码修改了,但用户随时可以设置重要等级。通知渠道的重要等级越高,发出的通知就越容易获得用户的注意,如高等级通知渠道发出的通知可以弹出横幅,发出声音,低等级的通知渠道发出的通知不但可能在某些情况下被隐藏,还有可能会被改变显示的顺序,将其排在更重要的通知之后。

//首先获得NotificationManager对通知进行管理
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
//调用NotificationChannel之前先判断当前版本是否为8.0及以上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
	 //传入channelid,channelname,重要等级构建channel
     val channel = NotificationChannel("normal", "Normal", NotificationManager.IMPORTANCE_DEFAULT)
     //创建channel
     manager.createNotificationChannel(channel)
     val channel2 = NotificationChannel("important", "重要",NotificationManager.IMPORTANCE_HIGH)
     manager.createNotificationChannel(channel2)
}
//
sendNotice.setOnClickListener {
	//设置pendingintent,使通知具有点击逻辑
    val intent = Intent(this, NotificationActivity::class.java)
    val pi = PendingIntent.getActivity(this, 0, intent, 0)
	
	//使用AndroidX库中的兼容API进行通知创建
	//传入参数为context,和channelid,如果channelid不存在通知就不会显示出来
    val notification = NotificationCompat.Builder(this, "important")
        .setContentTitle("浙江大学!")
        .setContentText("近日,浙江大学")
        //smallicon只能用纯alpha图层的图片
        .setSmallIcon(R.drawable.small_icon)
        .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.large_icon))
        .setStyle(NotificationCompat.BigPictureStyle().bigPicture(
                            BitmapFactory.decodeResource(resources, R.drawable.big_image)
                    ))
        .setContentIntent(pi)
        .setAutoCancel(true)
        .build()
    //调用notify方法将通知显示出来    
    manager.notify(1, notification)
}

PendingIntent

这里我们为通知设置了PendingIntent,它与Intent类似,也指明某一个意图,都可以启动Avtivity、启动Service以及发生广播等。不同的是,Intent趋向于立即执行某个动作,而PendingIntent倾向于在某个合适的时机执行某个动作。所以可以把它简单理解为延迟执行的Intent。

相机、播放音频

不再赘述,都是应用方法。
MediaPlayer、VideoView

猜你喜欢

转载自blog.csdn.net/qq_45254908/article/details/107496844