Android学习-运用手机多媒体-通知使用技巧、调用摄像头拍照、从相册中选取照片、播放音频和视频文件(MediaPlayer、VideoView)

本文深入讲解了Android的通知功能,包括通知的基本用法、兼容性处理、高级定制(声音、震动、LED灯),以及与广播、PendingIntent的关系。通过实例演示了创建通知、点击反应和权限管理,展示了如何利用多媒体资源增强用户体验。

android提供了一系列的API,使得我们可以在程序中调用很多的多媒体资源,从而编写出更加丰富多彩的应用程序。

使用通知

通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。Android的通知功能获得了大量用户的认可和喜爱,就连IOS系统也在5.0版本之后加入了类似的功能。

通知的基本用法
通知的用法比较灵活,既可以在活动里创建,也可以在广播接收器里创建,也可以在服务里创建。像比如广播接收器与服务,在活动里创建的通知的场景还是比较少的,因为一般只有当程序进入到后台的时候我们才需要使用通知。

不过,无论是在那里创建通知,整体的步骤都是相同的。
首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService方法获取到。getSystemService方法接受一个字符串参数用于确定获取系统的哪个服务,这里我们传入Context.NOTIFICATION_SERVICE即可,因此,获取NotificationManager的实例就可以写成
在这里插入图片描述

接下来需要使用一个Builder的构造器来创建Notification对象,但问题在于,几乎Android系统的每一个版本都会对通知这部分功能进行或多或少的修改,API不稳定性问题再通知上面突显的尤其严重。那么该如何解决这个问题呢?其实就是使用support库中提供的兼容API。support-v4库中提供了一个NotificationCompat类,使用这个类的构造器来创建Notification对象,就可以保证我们的程序在所有Android系统版本上都能正常工作了,代码如下
在这里插入图片描述
上述代码只是创建了一个空的Notification对象,并没有实际作用,我们可以在最终的build方法之前连缀任意多的设置方法来创建一个丰富的Notification对象,先看一些最基本的设置:
在这里插入图片描述
上述代码一共调用了五个方法。
setContentTitle方法用于指定通知的标题内容
setContentText方法用于指定通知的正文内容,同样下拉系统状态栏就可以看到这部分内容。
setWhen方法用于指定通知被创建的时间,以毫秒为单位,当下拉系统状态栏时,这里指定的时间会显示在相应的通知上
setSmallIcon方法用于设置通知的小图标,注意只能使用纯alpha图层的图片进行设置,小图标会显示在系统状态栏上
setLargeIcon方法用于设置通知的大图标,当下拉系统状态栏时,就可以看到设置的大图标了。

以上工作都完成之后,只需要调用NotificationManager的notify方法就可以让通知显示出来了。notify方法接受两个参数,第一个是参数id,要保证为每个通知所指定的id都是不同的。第二个参数则是Notifycation对象,这里直接将我们刚刚创建好的Notification对象传入即可。因此,显示一个通知就可以写成:
在这里插入图片描述

下面通过一个具体例子来看一看通知时什么样子的。

新建一个NotificationTest项目,并修改activity_main,xml中的代码,如下在这里插入图片描述
布局中只有一个send notice按钮用于发出通知。
接下来修改MainActivity中的代码,如下:
在这里插入图片描述
上述进行了通知的创建,为了简单起见通知栏的大小图都直接设置成了ic_launcher

接下来实现通知的点击效果,还需要在代码中进行相应的设置,一个新的概念:PendingIntent

从名字上就可以看出PendingIntent就和Intent有些类似,他们之间也确实存在着不少共同点。比如他们都可以去指定一个“意图”,都可以用于启动活动、启动服务以及发送广播等。不同的是Intent更加倾向于去立即执行某个动作,而PendingIntent更加倾向于在某个合适的时机去执行某个动作。所以,也可以把PendingIntent简单地理解为延迟执行的Intent。

PendingIntent的用法同样很简单,他主要提供了几个静态方法用于获取PendingIntent的实例,可以根据需求来选择是使用getActivity方法、getBroadcast方法还是getService方法。这几个方法所接收的参数都是相同的。,第一个参数依旧是Context。第二个参数一般用不到,通常是都是传入0即可。第三个参数是一个Intent对象,我们可以通过这个对象构建出PendingIntent的“意图”。第四个参数用于确定PendingIntent的行为,有FLAG_ONE_SHOT、FLAGE_NO_CREATE、FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT这四种值可以选,每种值的具体含义可以查看文档,通常情况下这个参数传入0就可以了。

再看NotificationCompat.Builder。这个构造器还可以再连追一个setContentIntent方法,接收的参数正是一个PendingIntent对象。因此,这里就可以通过PendingIntent构建出一个延迟执行的“意图”,当用户接收到这条通知时就会执行相应的逻辑。

现在来优化NotificationTest项目,给刚才的通知加上点击功能,让用户点击它的时候可以启动另一个活动。
首先要准备

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值