资源预览内容
第1页 / 共116页
第2页 / 共116页
第3页 / 共116页
第4页 / 共116页
第5页 / 共116页
第6页 / 共116页
第7页 / 共116页
第8页 / 共116页
第9页 / 共116页
第10页 / 共116页
亲,该文档总共116页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
李华忠 梁永生 刘涛 主编 2019年5月24日, Android应用程序设计 第6章 Android多媒体,人民邮电出版社,提纲,6.1 项目导引 6.2 项目分析 6.3 技术准备 6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口) 6.3.2 知识点2:Service 6.3.3 知识点3:MediaPlayer 6.3.4 知识点4:视频 6.3.5 知识点5:录音,提纲,6.4 项目实施 6.5 技术拓展 6.6 本章小结 6.7 强化练习,6.1 项目导引,自从Android发布以来受到了人们的普遍青睐,最重要的原因就是其开源性。我们可以在Android手机上装自己所喜欢的软件。而我们装的最多的无疑就是游戏、音乐播放、图片处理类的软件。这些都离不开Android系统的多媒体技术。本章我们就着重学习如何来将应用程序借助Android的多媒体技术做成一个“有声有色”的应用程序。,6.2 项目分析,在我们的实际开发中经常会用到多媒体的技术。如图6-1所示,在我们做的电子导游中需要语音播放我们所在景点的语音介绍。,图6-1 电子导游界面,6.2 项目分析,在项目研发过程中我们需要考虑用户的使用状态,我们的软件面向的是黄果树景区,在贵州山地占大部分可能会存在网络信号差的问题。那么就需要考虑将我们的音频放到本地,直接调用。如果我们开发的是北京的电子导游,那么我们就可能需要将我们的音频放到服务器上进行边下载边播放。 在这个项目中我们还碰到了一个问题就是,既然把音频放到了客户端,那么如何控制音频文件的大小就成了控制apk大小的决定因素。这也是我们在多媒体这章需要掌握和注意的。在实际操作之前我们先来学习下多媒体技术的基本内容。,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),随着3G时代的来临,无论是上网、娱乐,还是办公、学习,智能手机将是用户的首选工具。然而Android是一个以Google为首的由30多家科技公司和手机公司组成的开发手机联盟。Android受到广大手机用户的喜爱,由于丰富的应用程序作为支持,使得3G手机出了进行通话外,给我们带来了更好的3G体验。,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),Android目前有3种网络接口可以使用,分别为:java.net.*、org.apache和android.net.*。下面我们就简单的介绍一下这些接口的功能和作用。,标准Java接口,Java.net.*提供与网络连接相关的类,java.net.*的包分为两个部分:低级 API和高级API。,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),(1)低级API主要用于处理以下抽象: 地址,也就是网络标识符,如 IP 地址。 套接字,也就是基本双向数据通信机制。 接口,用于描述网络接口。 (2)高级API主要用于处理以下抽象: URI,表示统一资源标识符。 URL,表示统一资源定位符。 连接,表示到 URL 所指向资源的连接。 地址,在整个 java.net API 中,地址或者用作主机标识符或者用作套接字端点标识符。,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),代码清单6-1 使用java.net创建连接 try URL url=new URL(“http:/www.baidu.com“);/定义URL标识符 HttpURLConnection http=(HttpURLConnection) url.openConnection();/打开连接 int nRC=http.getResponseCode();/得到连接状态 if(nRC=HttpURLConnection.HTTP_OK) /取得数据 InputStream is=http.getInputStream(); /处理数据 catch(Exception e) /捕获异常 ,下面我们通过一段程序代码来看下java.net.*在程序中的使用,如代码清单6-1所示。,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),2Apache接口,Http协议是目前在Internet上使用最多、最重要的通信协议,越来越多的Java应用程序需要通过Http协议来访问网络资源。虽然前面我们讲到java.net包中已经提供了访问Http协议的基本功能,但是这对于大部分应用程序是不够的。Android系统引入了Apache HttpClient以及对其的封装和扩展,如设置缺省的Http超时和缓存大小等。Android使用的是目前最新的HttpClient 4.0。通过Apache创建HttpClient以及Get/Post、HttpRequest等对象,设置连接参数,执行Http操作,处理服务器返回结果等功能。,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),下面我们同样通过代码段来了解Apache接口的应用。,代码清单6-2 使用android.net.http.*连接网络 try HttpClient hc=new DefaultHttpClient();/创建HttpClient使用默认属性 HttpGet get=new HttpGet(“http:/www.baidu.com“);/创建HttpGet实例 HttpResponse rp=hc.execute(get);/连接 if(rp.getStatusLine().getStatusCode()=HttpStatus.SC_OK) InputStream is=rp.getEntity().getContent(); /处理数据 catch(IOException )捕获异常 ,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),3Android网络接口,Android.net.*包实际上是通过对Apache的HttpClient进行封装,实现的一个Http变成接口,同时也提供了Http请求队列管理以及Http连接池管理,以提高并发情况下的处理效率,除此之外还有网络状态监视等接口、网络访问的socket,常用的Uri类以及有关WiFi相关的类等。,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),代码清单6-3就是最简单的Socket连接代码,如下所示。,代码清单6-3 Android中的Socket链接 try InetAddress inetAddress=InetAddress.getByName(“192.168.1.25“); Socket client=new Socket(inetAddress,61203,true); InputStream in=client.getInputStream(); OutputStream out=client.getOutputStream(); /处理数据 out.close(); in.close(); client.close(); catch(UnknownHostException e) catch(IOException e) ,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),4HTTP通信,HTTP(Hyper Text Transfer Protocol,超文本传输协议)用于传送WWW方式的数据,采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含了请求的方法、URI、协议版本以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本、成功或者错误编码,还包括服务器信息、实体元信息以及可能的实体内容。 Google以网络搜索引擎著称,自然而然也会使Android SDK拥有强大的HTTP访问能力。在Android SDK中,Google集成了Apache的HttpClient模块。要注意的是,这里的Apache HttpClient模块是HttpClient4.0(org.apache.http.*),而不是Jakarta Commons HttpClient 3.x(org.apache.commons.httpclient.*)。,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),(1)Http Get与Http Post,http通信中使用最多的就是Get和Post。Get请求方式中,参数直接放在URL字串后面,传递给服务器。 格式如下: HttpGet method = new HttpGet(“http:/www.baidu.com?admin=Get”); HttpResponse response = client.execute(method); 而Post请求方式中,参数必须采用NameValuePair数组的传送方式。 格式如下: HttpPost method = new HttpPost(“http:/www.baidu.com”); List params = new ArrayList(); params.add(new BasicNameValuePair(“admin”, “Get”); method.setEntity(new UrlEncodedFormEntity(params); HttpResponse response = client.execute(method);,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),在这两种通信方式中,一般情况下,两种方式实现的效果一样。但也有特殊情况,可能服务器只支持GET的请求方式,而不支持POST的请求方式,所以导致POST请求方式获取不到需要的数据;也可能服务器只支持POST的请求方式,不支持GET的请求方式。于是,我们需要查看服务器返回的状态码,如果是“200”则证明连接成功,否则连接失败。状态码的取得方式可以通过抓包观察,也可以直接用代码获取。,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),用代码获得服务器返回的状态码具体参照为: HttpResponse httpResponse = new DefaultHttpClient().execute(method); If(httpResponse.getStatusLine().getStatusCode() = 200) / TODO: 从URL获取数据 else / TODO: 显示连接异常信息 ,6.3 技术准备,6.3.1 知识点1:Android网络基础(标准Java、Apache、Android网络和HTTP通信接口),在这里我们需要注意的是,由于Android的很多操作都涉及权限的问题,如打电话和发短信等,都需要权限。而Andro
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号