文档开发者中心
我的

第8章 运用多媒体让你的程序丰富多彩(转载)

8.1 多媒体概述

一 什么是多媒体

多媒体的英文单词是Multimedia,它由media和multi两部分组成。一般理解为多种媒体的综合

多媒体是计算机和视频技术的结合,实际上它是两个媒体;声音和图像,或者用现在的术语:音响和电视。

多媒体(Multimedia),在计算机系统中,组合两种或两种以上媒体的一种人机交互式信息交流和传播媒体

使用的媒体包括文字、图片、照片、声音(包含音乐、语音旁白、特殊音效)、动画和影片,以及程式所提供的互动功能

多媒体是超媒体系统中的一个子集,而超媒体系统是使用超链接构成的全球信息系统

全球信息系统是因特网上使用 TCP/IP 协议和 UDP/IP 协议

二、本章提纲

在过去的几十年里,手机的用途和功能比较单一,只能用于拨打电话和发送短信。随着时代的进步,科技的不断发展,智能机的出现改变了人们的生活方式。如今的时代,手机在我们的生活中成为了不可缺少的一部分,每天把自己的生活奇遇发到朋友圈,有时候拍成短视频,一起与朋友分享。

而这些都来自手机强大的多媒体的支撑,android在这些方面也提供了相应的API,从而使我们的应用更加丰富多彩,本章主要是主要介绍android中一些常用的多媒功能的使用技术,既要从一下几个方面学习:

  • 手机上运行你的应用程序

  • 通知

  • 音频

  • 视频

  • 相册

第一节 如何在手机运行你的应用程序

首先智能手机一部、USB连接线,当然了这里的usb线是能够传输数据的那种,只能充电的多数都没见过了吧、电脑一台。

用数据线把手机连接到电脑上,找到你的爱机 设置-->(更多设置)->关于手机->软件版本号, 连续点击版本号,就会激活开发者模式,当然了这些都是比较常见的手机的打开方式,但是对于小米的手机就不同了,然后返回,找到开发者模式点击进入,打开usb调试,手机上提示是否允许电脑连接,手机点击允许,如果你用的是window系统的电脑,电脑会自动去找下载相应的驱动,如果下载不成功,你也可以借助360助手,应用宝等工具进行安装。当然如果你的电脑是Linux系统,驱动什么的都可以免了,因为android系统本身就是基于linux系统的。

运行程序的时候直接选择手机安装即可,在手机上运行。

可能觉得奇怪为什么前面几章都没有提及到在真机上运行突然在这里写出来了呢, 如果有这样的疑问那么说明你前面的章节你是认真的看了的,为什么要在这里给同学们介绍真机的运行呢,

首先模拟器上面很多东西都是虚拟的,如果用的是android开发工具中自带的模拟器,是没有安装语音等驱动的。本章涉及到的是多媒体相关的功能的介绍,那么就要通过接口去操作手机的硬件,而在模拟器上面是没有这些硬件的,所以建议读者本章的程序都在真机运行,当然了以后的开发中涉及相关语音等功能,也建议在真机上调试开发。

8.2 通知的使用

一、什么是通知(Notification)

通知是一个可以在应用程序正常的用户界面之外显示给用户的消息

通知发出时,它首先出现在状态栏的通知区域中,用户打开通知抽屉可查看通知详情。通知区域和通知抽屉都是用户可以随时查看的系统控制区域。

二、通知栏的改动

在每个android版本的更新中通知栏都有或多或少的改动,

在界面风格上面,在通知栏androidN 通知栏变动大:

• 通知消息快捷回复

安卓7.0加入了全新的API,支持第三方应用通知的快捷操作和回复,例如来电会以横幅方式在屏幕顶部出现,提供接听/挂断两个按钮;信息/社交类应用通知,还可以直接打开键盘,在输入栏里进行快捷回复。

• 通知消息归拢

安卓7.0会将同一应用的多条通知提示消息归拢为一项,点击该项即可展开此前的全部通知,允许用户对每个通知执行单独操作。

• 通知时间的显示

安卓7.0通知显示的时间默认是跟随在标题的后面,而不是以往的通知栏的右边

三、创建通知的变化

随着Android系统不断升级,Notification的创建方式也随之变化,主要变化如下:

Android 3.0之前

Android 3.0 (API level 11)之前,使用new Notification()方式创建通知:

  val mNotifyMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
  val contentIntent = PendingIntent.getActivity(      this, 0,  Intent(this, ResultActivity.class), 0);
val notification =  Notification(icon, tickerText, when);
notification.setLatestEventInfo(this, title, content, contentIntent);
mNotifyMgr.notify(NOTIFICATIONS_ID, notification)

Android 3.0 (API level 11)及更高版本

  val mNotifyMgr = 
      (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
val contentIntent = PendingIntent.getActivity(      this, 0, new Intent(this, ResultActivity.class), 0);

val notification = new Notification.Builder(this)
            .setSmallIcon(R.drawable.notification_icon)
            .setContentTitle('我的通知')
            .setContentText('通知的内容。。。')
            .setContentIntent(contentIntent)
            .build();// getNotification()mNotifyMgr.notify(NOTIFICATIONS_ID, notification);

这里需要注意: 'build()' 是Androdi 4.1(API level 16)加入的,用以替代 'getNotification()'。API level 16开始弃用'getNotification()'

兼容Android 3.0之前的版本

为了兼容API level 11之前的版本,v4 Support Library中提供了 NotificationCompat.Builder()这个替代方法。它与Notification.Builder()类似,二者没有太大区别。

val btm = BitmapFactory.decodeResource(resources,
                R.mipmap.ic_smail)
        val builder = NotificationCompat.Builder(this)
        val intent = Intent(this, MainActivity::class.java)  //需要跳转指定的页面        val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
        builder.setContentIntent(pendingIntent)
        builder.setSmallIcon(R.mipmap.ic_smail)// 设置图标
        builder.setContentTitle('外卖订单的通知')// 设置通知的标题
        builder.setContentText('通知的内容')// 设置通知的内容
        builder.setWhen(System.currentTimeMillis())// 设置通知来到的时间
        builder.setAutoCancel(true) //自己维护通知的消失
        builder.setTicker('new message')// 第一次提示消失的时候显示在通知栏上的
        builder.setOngoing(true)
        builder.setLargeIcon(btm)
        builder.setNumber(20)

        val notification = builder.build()
        notification.flags = Notification.FLAG_NO_CLEAR  //只有全部清除时,Notification才会清除
        notificationManager!!.notify(0, notification)
    }    private fun myNotify() {        //实例化一个NotificationCompat.Builder对象
        val builder = NotificationCompat.Builder(this)
                .setContentText('你有新的外卖订单')
                .setContentTitle('外卖通知')
                .setSmallIcon(R.mipmap.ic_smail)        //定义并设置一个通知动作(Action)
        val resultIntent = Intent(this, ResultActivity::class.java)        val pi = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT)
        builder.setContentIntent(pi)        //生成Notification对象
        val notification = builder.build()        //使用NotificationManager发送通知
        val notifiManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notifiManager.notify(0, notification)

四、通知基本用法

通知的必要属性

一个通知必须包含以下三项属性:

  • 小图标,对应 setSmallIcon()

  • 通知标题,对应 setContentTitle()

  • 详细信息,对应 setContentText()

其他属性均为可选项,更多属性方法请参考NotificationCompat.Builder。

尽管其他都是可选的,但一般都会为通知添加至少一个动作(Action),这个动作可以是跳转到==Activity==、启动一个==Service==或发送一个==Broadcast==等。 通过以下方式为通知添加动作:

  • 使用PendingIntent

  • 通过大视图通知的 Action Button //仅支持Android 4.1 (API level 16)及更高版本,稍后会介绍

    创建通知

  1. 实例化一个NotificationCompat.Builder对象

  2. 定义并设置一个通知动作(Action)

  3. 生成Notification对象

  4. 使用NotificationManager发送通知

代码实例

        //实例化一个NotificationCompat.Builder对象
        val builder = NotificationCompat.Builder(this)
                .setContentText('你有新的外卖订单')
                .setContentTitle('外卖通知')
                .setSmallIcon(R.mipmap.ic_smail)        //定义并设置一个通知动作(Action)
        val resultIntent = Intent(this, ResultActivity::class.java)        val pi = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT)
        builder.setContentIntent(pi)        //生成Notification对象
        val notification = builder.build()        //使用NotificationManager发送通知
        val notifiManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notifiManager.notify(0, notification)

更新通知

更新通知很简单,只需再次发送相同ID的通知即可,如果之前的通知依然存在则会更新通知属性,如果之前通知不存在则重新创建。

示例代码:

 val mNotifyMgr = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager        // Sets an ID for the notification, so it can be updated
        val notifyID = 1
        val mNotifyBuilder = NotificationCompat.Builder(this)
                .setContentTitle('New Message')
                .setContentText('You've received new messages.')
                .setSmallIcon(R.mipmap.ic_launcher)

        var numMessages = 0

        mNotifyBuilder.setContentText('new content text')
                .setNumber(++numMessages)
        mNotifyMgr.notify(notifyID, mNotifyBuilder.build())

取消通知

取消通知有如下4种方式:

  • 点击通知栏的清除按钮,会清除所有可清除的通知

  • 设置了 setAutoCancel() 或 FLAG_AUTO_CANCEL的通知,点击该通知时会清除它

  • 通过 NotificationManager 调用 cancel() 方法清除指定ID的通知

  • 通过 NotificationManager 调用 cancelAll() 方法清除所有该应用之前发送的通知

五、通知类型

大视图通知

通知有两种视图:普通视图和大视图。

大视图:

默认情况下为普通视图,可通过NotificationCompat.Builder.setStyle()设置大视图。 注: 大视图(Big Views)由Android 4.1(API level 16)开始引入,且仅支持Android 4.1及更高版本。

构建大视图通知

以上图为例: 1、构建Action Button的PendingIntent

    val dismissIntent = Intent(this, PingService::class.java)        dismissIntent.action = CommonConstants.ACTION_DISMISS
        val piDismiss = PendingIntent.getService(                this, 0, dismissIntent, 0)

        val snoozeIntent = Intent(this, PingService::class.java)        snoozeIntent.action = CommonConstants.ACTION_SNOOZE
        val piSnooze = PendingIntent.getService(this, 0, snoozeIntent, 0)

2、构建NotificatonCompat.Builder对象

 builder.setContentIntent(pendingIntent)
        builder.setSmallIcon(R.mipmap.ic_smail)// 设置图标
        builder.setContentTitle('外卖订单的通知')// 设置通知的标题
        builder.setContentText('通知的内容')// 设置通知的内容
        builder.setWhen(System.currentTimeMillis())// 设置通知来到的时间
        builder.setAutoCancel(true) //自己维护通知的消失
        builder.setTicker('new message')// 第一次提示消失的时候显示在通知栏上的
        builder.setOngoing(true)
        builder.setLargeIcon(btm)
        builder.setNumber(20)

        val notification = builder.build()
        notification.flags = Notification.FLAG_NO_CLEAR  //只有全部清除时,Notification才会清除
        notificationManager!!.notify(0, notification)

3、其他步骤与普通视图相同

通知常见属性和常量

1、声音提醒

//默认声音notification.defaults |= Notification.DEFAULT_SOUND;//自定义声音notification.sound = Uri.parse('file:///sdcard0/notification.ogg');

2、震动提醒

//默认振动notification.defaults |= Notification.DEFAULT_VIBRATE;//自定义振动long[] vibrate = {100, 200, 300, 400}; //震动效果// 表示在100、200、300、400这些时间点交替启动和关闭震动 notification.vibrate = vibrate;

3、闪烁提醒

//默认闪烁notification.defaults |= Notification.DEFAULT_LIGHTS;//自定义闪烁notification.ledARGB = 0xff00ff00; // LED灯的颜色,绿灯notification.ledOnMS = 300; // LED灯显示的毫秒数,300毫秒notification.ledOffMS = 1000; // LED灯关闭的毫秒数,1000毫秒notification.flags |= Notification.FLAG_SHOW_LIGHTS; // 必须加上这个标志

常见的Flags

FLAG_AUTO_CANCEL //当通知被用户点击之后会自动被清除(cancel)FLAG_INSISTENT  //在用户响应之前会一直重复提醒音FLAG_ONGOING_EVENT  //表示正在运行的事件FLAG_NO_CLEAR   //通知栏点击“清除”按钮时,该通知将不会被清除FLAG_FOREGROUND_SERVICE  表示当前服务是前台服务

更多Notification属性详见Notification。


文章转自:我是农民的孩子

点赞
收藏
回复
分享
举报
浏览1037 编辑于2019-12-18 07:30未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

目录 收起
8.1 多媒体概述
一 什么是多媒体
二、本章提纲
第一节 如何在手机运行你的应用程序
8.2 通知的使用
一、什么是通知(Notification)
二、通知栏的改动
三、创建通知的变化
四、通知基本用法
五、通知类型
通知常见属性和常量
了解社区公约,与您携手共创和谐专业的开发者社区。