Android应用开发案例教程(AndroidStudio版)课件_第1页
Android应用开发案例教程(AndroidStudio版)课件_第2页
Android应用开发案例教程(AndroidStudio版)课件_第3页
Android应用开发案例教程(AndroidStudio版)课件_第4页
Android应用开发案例教程(AndroidStudio版)课件_第5页
已阅读5页,还剩275页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android应用开发案例教程 (Android Studio版) 第1页,共280页。contents010302040506Android UI设计图像和动画数据存储广播Broadcast与服务Service媒体播放与录制Activity与多个用户界面目 录07网络编程技术第2页,共280页。第3页,共280页。Android发展史2003年10月,Andy Rubin等人创建Android公司,并组建Android团队2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为Google公司工程部副总裁,继续负责Android项目。第4页,

2、共280页。Android发展史2007年11月5日,谷歌公司正式向外界展示了这款名为Android的操作系统,并且在这天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成,并与84家硬件制造商、软件开发商及电信营运商组成开放手持设备联盟(Open Handset Alliance)来共同研发改良Android系统,这一联盟将支持谷歌发布的手机操作系统以及应用软件。Google以Apache免费开源许可证的授权方式,发布了Android的源代码。第5页,共280页。什么是Android?第6页,共280页。Android发展史2008年,在

3、GoogleI/O大会上,谷歌提出了AndroidHAL架构图,在同年8月18号,Android获得了美国联邦通信委员会(FCC)的批准,在2008年9月,谷歌正式发布了Android 1.0系统,这也是Android系统最早的版本。2009年4月,谷歌正式推出了Android 1.5这款手机,从Android 1.5版本开始,谷歌开始将Android的版本以甜品的名字命名,Android 1.5命名为Cupcake(纸杯蛋糕)。该系统与Android 1.0相比有了很大的改进。第7页,共280页。Android发展史2010年10月份,谷歌宣布Android系统达到了第一个里程碑,即电子市场

4、上获得官方数字认证的Android应用数量已经达到了10万个,Android系统的应用增长非常迅速。在2010年12月,谷歌正式发布了Android 2.3操作系统Gingerbread (姜饼)。第8页,共280页。Android应用程序组成1.Activity2.Intent 3.BroadcastReceiver4.Service5.Content Provider第9页,共280页。Activity相当于手机屏幕的一个页面,上面可以放各种UI组件一个应用包含多个ActivityAndroid使用堆栈存放多个Activity对象,并自动进行管理Activity存在生命周期第10页,共28

5、0页。Intent 和Intent FilterIntent :是一个将要执行的操作的抽象描述(Google)。主要用于在不同Activity之间跳转,并且传递数据。主要动作类型:Main、PICK、VIEW、EDIT等,对应的数据以URI表示。Intent Filter用于描述Activity能够操作那些Intent对象第11页,共280页。BroadcastReceiver主要用于对应用的外部事件进行响应。通过NotificationManager通知用户事件发生了。通过在AndroidManifest.xml中定义,或者通过context.RegisterReceiver()注册。各种应

6、用还可以通过Context.sendBroadcast()把自己的Intent Broadcast广播给其他应用。第12页,共280页。Service后台运行的应用程序。音乐播放器的后台播放第13页,共280页。Content Provider用于在不同应用之间交换数据一个应用通过实现ContentProvider的抽象接口,从而把自己的数据暴露给其他应用调用,而其他应用程序无需关心数据的存储的具体细节。第14页,共280页。Android UI设计Chap 01第15页,共280页。第一章 目 录1.1 新建Android项目1.2 Android布局管理1.3 用户界面组件包1.4 常用组

7、件1.5 列表组件第16页,共280页。1.1.1 创建一个新项目 启动Android Studio, 选择“Start a new Android Studio project”菜单。 然后在对话框中输入应用程序名称(Chap01)、包名等参数。并选择Android SDK的版本。第17页,共280页。1.1.2 Android项目结构 打开Chap01项目,可以看到应用项目的目录和文件结构。app模块下的文件目录结构:manifests: 项目的配置信息文件。java: 源代码和测试代码。res: 资源目录,存储项目资源。Gradle Scripts模块下的文件目录结构Gradle是一种依

8、赖管理工具基于Groovy的内部领域特定(DSL)语言定义12第18页,共280页。资源目录res及其资源类型res目录用于存放项目所需要的声音、图片、用户界面等资源文件。其中最重要的三个目录:1. drawable目录存放图标资源2. layout目录存放用户界面布局文件。3. values目录存放参数描述文件资源,都是XML文件,如字符串string.xml、颜色color.xml、 数组arrays.xml等。3res目录结构第19页,共280页。1.1.3 res资源引用方法当在程序中引用资源时需要使用R类,引用形式:R.资源类型.资源名称例如,(1)在Activity中显示布局视图,

9、setContentView(R.layout.main);(2)程序要获得布局文件中的图片组件 ,img = (Image)finadViewById(R.id.img01);(3)程序要获得布局文件中的列表组件, list= (List)findViewById(R.id.alist);第20页,共280页。1.1.4 AndroidManifest.xml项目配置文件每个应用程序都需要,它位于应用程序根目录下第21页,共280页。1.1.5 Android应用程序架构分析逻辑控制层与表现层 在Android应用程序中,逻辑控制层与表现层是分开的设计的。逻辑控制层由Java应用程序实现,表

10、现层由XML文档描述。1逻辑控制层与表现层关系图第22页,共280页。Activity主程序介绍布局文件与Activity关联是非常重要的一个环节。Activity重写方法onCreate。每个Activity都要进行一些必要的初始化。2第23页,共280页。1.2 Android布局管理设计思想:Android系统应用程序的设计模式是采用MVC模式,即把应用程序分为表现层(View)、控制层(Control)、业务模型层(Model)。按照这种模式,图形界面布局为表现层,Activity控制程序为控制层,将应用程序的界面设计与功能控制设计分离,从而可以单独地修改用户界面。Android 系统

11、的布局管理指的是在XML布局文件中设置组件的大小、间距、排列及对齐方式等。Android 系统中常见的布局文件有: LinearLayout、FrameLayout、TableLayout、RelativeLayout、GridLayout、ConstraintLayout。第24页,共280页。1.2.2 常见的布局方式布局文件可以单独创建,创建时需要输入文件名,文件名的字母必须全部小写,然后选择布局类型。新建布局第25页,共280页。1 线性布局LinearLayout线性布局LinearLayout将组件按照水平或垂直方向排列。1) 设置线性布局为水平方向 android:orienta

12、tion = horizontal”2) 设置线性布局为垂直方向 android:orientation = vertical【例1-1】线性布局应用示例设计一个5个按钮的线性布局线性布局的控件层级关系第26页,共280页。2 帧布局FrameLayout帧布局FrameLayout是将组件放置到左上角位置,当添加多个组件时,后面的组件将遮盖之前的组件。在XML布局文件中,由根元素FrameLayout来标识帧布局。【例1-2】帧布局应用示例将图像文件复制到 res/drawable 目录下布局的控件层级关系和属性图1-11 帧布局示例结果第27页,共280页。3 表格布局TableLayou

13、t表格布局将页面划分成行列构成的单元格。由根元素TableLayout来标识表格布局。行由定义。组件放置到哪一列,由 android:layout_column 指定列编号。三个常用属性 android:collapseColumns: 设置需要被隐藏的列序号 android:shrinkColumns: 设置允许被收缩的列序号 android:stretchColumns: 设置运行被拉伸的列序号设计一个3行4列的表格布局第28页,共280页。4 相对布局RelativeLayout相对布局是采用相对其它组件的位置的布局方式。通过指定ID关联其他组件,与之右对齐、上下对齐等方式来排列组件。【

14、例1-4】应用相对布局设计一个图片和4个按钮,如下图第29页,共280页。5 网络布局 GridLayout网格布局是把设置区域划分为若干行和若干列的网格,网格中的一个组件可以占据多行或多列。布局的属性可以设置组件在网络中的大小和摆放方式。主要属性如下: alignmentMode:设置布局管理器的对齐方式。 columnCount:设置网格列的数量。 rowCount:设置网格行的数量。 layout_columnSpan:设置组件占据的列数。 layout_rowSpan:设置组件占据的行数。应用网格布局设计一个计算器界面第30页,共280页。6 约束布局ConstraintLayoutA

15、ndroid Studio 2.3 版本默认的布局是 ConstraintLayout 。在工作区中有两种预览,一种设计预览,一种叫做蓝图的东西。两者可以辅助进行布局预览。第31页,共280页。1.3.1 用户界面组件包 widgetAndroid 系统为开发人员提供了丰富多彩的用户界面组件,大多数组件在 widget 包。第32页,共280页。1.3.2 View 类视图组件View类,是用户界面组件的共同父类。几乎所有的高级UI组件都继承自View类。例如TextView、Button、List,EditText、RadioButton、Checkbox 等。一个View就是屏幕上一块矩形

16、区域,负责渲染和上面的事件处理,并可以设置该区域是否可见,是否可以获取焦点等。对于View类及其子类的属性,可以在布局文件中设置,也可以在Java文件中动态设置。第33页,共280页。例1-7 设计一个文本标签组件程序,有标题和正文,而且翻看的文字超过一屏。把大段文字TextView放在一个ScrollView里面,当文字内容很长的时候,ScrollView自动会显示滚动条。第34页,共280页。values目录下的strings.xml,添加属性为”hello”的元素项的文本内容。例1-7 strings.xml部分源代码:青春塞缪尔厄尔曼n中译:王佐良 n青春不是年华,而是心境;第35页,

17、共280页。按钮Button按钮Button用于处理人机交互的事件。按钮Button是文本标签TextView的子类,继承了文本标签TextView所有的方法和属性。事件处理的实现步骤:关联控件(如按钮)、设置控件的事件监听、在监听接口添加事件处理程序。按钮需设置OnClickListener监听。当单击按钮时,通过OnClickListener监听接口触发onClick事件,实现用户需要的功能。实现接口时,一定要重写这个onClick方法。 第36页,共280页。 【例1-8】制作登陆界面 第37页,共280页。进度条 进度条ProgressBar能直观显示某个操作的进度。 进度条应用示例第

18、38页,共280页。单选按钮与复选按钮单选组件RadioGroup用于多项选择中只允许任选其中一项的情形。单选组件RadioGroup由一组单选按钮RadioButton组成。复选按钮CheckBox用于多项选择的情形,用户可以一次性选择多个选项。复选按钮CheckBox是按钮Button的子类,其属性与方法继承于按钮Button。单选按钮与复选框应用示例第39页,共280页。1.5 列表组件ListView ListView类是Android程序开发中经常用到的组件,该组件必须与适配器配合使用,由适配器提供显示样式和显示数据。第40页,共280页。【例1-11】简单列表示例,效果如图第41页

19、,共280页。AdapterAdapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的ListView、GridView 都需要用到Adapter。Data、Adapter、View三者关系第42页,共280页。Android中所有的Adapter一览 第43页,共280页。常用的AdapterBaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性; ArrayAdapter支持泛型操作,最为简单,只能展示文字。 SimpleAdapter有最好的扩充性,可以自定义出各种效果。 第44页,共280页。ArrayAda

20、pter数组适配器使用ArrayAdapter来装配数据,连接ListView 视图对象和数组来装配一批数据。ArrayAdapter的构造需要3个参数,依次为this、ListItem布局文件(注意是列表每一行的布局)、数据源(一个数组集合)。Android系统内置了多种ListItem布局方式。android.R.layout.simple_list_item_1:一行text。android.R.layout.simple_list_item_2:一行title,一行text。用setAdapter()完成适配的最后工作。第45页,共280页。示例1-11: ArrayAdapter列表

21、的显示需要三个元素:ListVeiw,用来展示列表的View。适配器,用来把数据映射到ListView上的中介。数据,具体的将被映射的字符串,图片,或者基本组件。OnItemClickListener是一个接口, 用于监听列表组件选项的触发事件。可以用 Toast.makeText().show()显示提示消息。第46页,共280页。与列表交互单击列表某一项,就会触发一些动作第一种:OnItemClickListener listener1; /单击Item时调用第二种:OnItemSelectedListener listener2; /选中Item后调用第47页,共280页。1.5.3使用

22、ListActivity类改写【例1-11】ListActivity和只包含一个ListView组件的普通Activity没有太大的区别,只是实现了一些封装而已。对显示ListView 做了许多优化,方便显示列表信息。ListActivity类继承于Activity,默认绑定了一个ListView组件,并提供一些与ListView处理相关的操作。常用的方法为getListView(),返回绑定的ListView组件。第48页,共280页。1.5.3 使用ListActivity类改写【例1-11】 布局文件中的ListView组件的id应设置为”id/android:list”第49页,共28

23、0页。1.5.4带图片的列表: 定制的列表布局 配合定制列表布局的数据适配器SimpleAdapter,扩展性很好,可以设置ImageView图片、Button按钮、CheckBox复选框等。【例1-13】实现一个带有图片的列表信息ListView3Activity.java效果如下:自定义格式的ListView第50页,共280页。1.5.5 没有数据的ListView 有时候列表还没有数据可以显示,需要我们用一句提示的语言来告诉用户,运行效果如下图:没有数据的ListView第51页,共280页。实战演练 生肖背后的故事设计三个布局文件,12生肖放到一个下拉列表框spinner,效果如图,

24、不限布局类型。这里只要求实现布局效果。没有数据的ListView图1-23实战演练第52页,共280页。THANKS第53页,共280页。Android应用开发案例教程 (Android Studio版) 第54页,共280页。contents010302040506Android UI设计图像和动画数据存储广播Broadcast与服务Service媒体播放与录制Activity与多个用户界面目 录07网络编程技术第55页,共280页。 Activity与多个用户界面Chap 02第56页,共280页。第2章 目 录2.1 什么是Activity 2.2 创建新的Activity 2.3 In

25、tent介绍 2.4 Bundle类及应用Intent传递数据2.5 消息提示类 2.6 对话框2.7 菜单设计第57页,共280页。Android系统自带了一套核心应用程序,应用程序包括电话拨号程序、短信程序、日历、音乐播放器、浏览器、联系人管理程序等,如图所示。Activity是Android程序中最基本的组件,显示可视化的用户界面,接收与用户交互所产生的界面事件。一个Activity代表一个单独的屏幕,可以添加多个控件,如Button、TextView、EditView等,组成和用户交互的用户界面。Android四大组件Activity、Service、BroadcastReceiver

26、、Content Provider。其中最重要的是Activity,它是应用程序通过屏幕给用户提供交互的Android组件。2.1 什么是Activity第58页,共280页。2.1 什么是Activity每个Activity都有一个窗口,在上面绘制了程序的用户界面。这个窗口通常会占满整个屏幕,但是也可以比屏幕小,或者悬浮在其它窗口上。一个程序一般会由多个Activity结合在一起。每个Activity为了执行不同的行为都能跳转到下一个Activity。Activity是用栈进行管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于

27、此Activity底部。第59页,共280页。Activity生命周期Activity有四种状态:运行状态暂停状态停止状态销毁状态第60页,共280页。程序调试 LogCatLogCat是用来捕获系统日志信息的工具,它能捕获包括Dalvik虚拟机产生的信息、进程信息、ActivityManager信息、Android运行时信息和应用程序信息等。不同类型日志信息级别不一样,从高到低依次为断言信息、错误信息、警告信息、通告信息、调试信息和详细信息。Log日志信息Log日志类能够记录程序运行过程中的相关信息方 法功能描述Log.e()记录错误信息Log.w()记录警告信息Log.i()记录一般提示性

28、信息Log.d()记录调试信息Log.v()记录详细的信息第61页,共280页。程序跟踪在Android Studio中通过单击某行代码左边的灰色区域可以在该行设置一个断点,这样,当使用Debug方式运行程序时,程序遇到断点会暂停下来,通过跟踪程序运行进而了解程序中各变量和流程的执行情况。第62页,共280页。2.1.1 启动Activity要素Activity在使用之前,需要在AndroidManifest文件中,注册Activity。使用Android SDK工具创建新的应用程序,会自动创建Activity的意图过滤器,默认情况如下:android:name属性是唯一必须的属性,它用来指定

29、Activity的类名。节点用来指定Activity的主入口行为指定了该Activity在应用程序中允许用户启动这个Activity。 第63页,共280页。2.1.2 Activity与布局之间的关系通常Activity具体显示什么是由Layout布局文件中设置的内容来决定的。布局文件是用xml语言编写的,是一种可扩展的标记语言。例如RelativeLayout标签是相对布局,这个布局中可以放很多控件,这些控件按照相对位置来进行摆放。再例如TextView有宽度和高度,文字以及背景颜色等属性。在Activity的onCreate方法中调用setContentView()方法来指定Activi

30、ty显示的内容,也就是指定Layout文件。这种分工把设计用户界面和编写Activity代码这两件工作很好的划分开来。123第64页,共280页。用户界面由View类派生的view对象分层次结构提供。每个view都在Activity的窗口中控制了一个特定的矩形的空间,它们能够接收响应用户的交互操作。在Activity中调用findViewById()方法可以获取控件的对象,再通过这个对象去设置控件的属性,随时修改控件的属性,包括文字内容、颜色等,以此来修改和改变 layout 布局。2.1.3 Activity与View之间的关系view对象findViewById()方法第65页,共280页

31、。2.2 创建新的Activity 【例2-1】从Activity启动另一个Activity示例。第66页,共280页。2.3 Intent介绍 在Android系统中,每个应用程序通常都由多个界面组成,每个界面就是一个Activity,在这些界面进行跳转时,实际上也就是Activity之间的跳转。跳转需要用到Intent意图组件,通过Intent可以开启新的Activity实现界面跳转。 Intent被称为意图,是程序中各组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。一般用于启动Activity、Service以及发送广播等(Service

32、和广播将在后续章节讲解)。 根据开启目标组件的方式不同,Intent被分为两种类型:显式意图和隐式意图。123第67页,共280页。2.3.1 显式意图显式意图可以直接通过名称开启指定的目标组件,通过其构造方法Intent(Context packageContext, Classcls)来实现。第1个参数为Context表示当前的Activity对象,使用this即可。第2个参数Class表示要启动的目标Activity。 通过这个方法创建一个Intent对象,然后将该对象传递给Activity的startActivity()方法即可启动目标组件。 Intent intent = new I

33、ntent(Activity01.this, Activity02.class); / 创建Intent对象startActivity(intent); / 开启Activity02 第68页,共280页。2.3.2 隐式意图 隐式意图相比显式意图来说更为抽象,它并没有明确指定要开启哪个目标组件,而是通过指定action和category等属性信息,系统根据这些信息进行分析,然后寻找目标Activity。其示例代码如下:Uri uri =Uri.parse();Intent it = new Intent(Intent.ACTION_VIEW,uri);startActivity (it);第

34、69页,共280页。2.3.3 Activity之间的跳转Intent组件是Android系统一种运行时的绑定机制, 在Android 的应用程序中,不管是页面切换,还是传递数据或是调用外部程序,都可能要用到Intent。Intent的属性有动作(Action)、数据(Data)、分类(Category)、类型(Type)、组件(Compent)以及扩展(Extra),其中最常用的是Action属性。12例如:Intent.ACTION_MAIN:应用程序入口。Intent.ACTION_SEND:发送短信、发送邮件等。Intent.ACTION_VIEW:显示数据给用户,如浏览网页、显示应用

35、、寻找应用等。Intent.ACTION_WEB_SEARCH:从谷歌搜索内容。Intent.ACTION_DIAL:拨打电话。Intent.ACTION_PICK:打开联系人列表。第70页,共280页。2.4 应用Intent传递数据2.4.1.Bundle类 Bundle类是用于为字符串与某组件对象建立映射关系的组件。 Bundle组件与Intent配合使用,可在不同的Activity之间传递数据。 Bundle类的常用方法如下。 (1) putString(String key,String value):把字符串用“键值对” 形式存放到Bundle对象中。 (2) remove(Str

36、ing key) :移除指定key的值 (3) getString(String key):获取指定key的字符。第71页,共280页。2.4.2 应用Intent在不同的Activity之间传递数据应用Intent在Activity界面之间传递数据 第72页,共280页。【例2-2】应用Intent传递数据数据在不同Activity界面之间传递的效果 第73页,共280页。2.5 消息提示类Toast用Toast来显示帮助或提示消息,该提示消息以浮于应用程序之上的形式显示在屏幕上。因为它并不获得焦点,所以不会影响用户的其他操作,使用消息提示类(Toast)的目的是尽可能不中断用户操作,让用户

37、看到提示信息。第74页,共280页。【例2-3】消息提示类Toast示例本案例将实现按默认方式、自定义方式和带图标方式显示Toast消息提示的效果。将事先准备好的图标文件icon.jpg复制到资源目录resdrawable下,以做提示消息的图标之用。第75页,共280页。2.6 对话框对话框是一个有边框和标题栏的、独立存在的容器,在应用程序中经常使用对话框组件来进行人机交互,用于需要用户采取行动才能继续执行的事件。 Android系统常用对话框: AlertDialog:消息对话框; ProgressDialog:进度条对话框; DatePickerDialog:日期选择对话框; TimePi

38、ckerDialog:时间选择对话框。第76页,共280页。2.7 菜单设计 菜单(Menu)由多个菜单选项组成,选择一个菜单项就可以引发一个动作事件。上下文菜单应用示例选项菜单应用示例第77页,共280页。实战演练 BMI体质指数计算器开发一款BMI体质指数计算器,实现输入身高和体重即可判断体型是否正常,体质指数如表所示,界面如图所示。BMI体质指数计算器第78页,共280页。THANKS第79页,共280页。Android应用开发案例教程 (Android Studio版) 第80页,共280页。contents010302040506Android UI设计图像和动画数据存储广播Broa

39、dcast与服务Service媒体播放与录制Activity与多个用户界面目 录07网络编程技术第81页,共280页。 多媒体播放与录制 Chap 03第82页,共280页。第3章 目 录3.1 音频播放3.2 视频播放3.3 录音与拍照第83页,共280页。3.1 音频播放3.1.1 多媒体处理包Android系统提供了针对常见多媒体格式的API,可以非常方便操作图片、音频、视频等多媒体文件,也可以操控Android终端的录音摄像设备。这些多媒体处理API均位于android.media包。第84页,共280页。3.1.2 媒体播放器 MediaPlayer MediaPlayer是Andr

40、oid系统多媒体android.media包中的类,主要用于控制音频文件,视频文件或者流媒体的播放。MediaPlayer对象的生命周期: 通常把一个对象从创建、使用、释放的过程称为该对象的生命周期,把MediaPlayer对象的创建、初始化、同步处理、释放、结束的运行过程称为MediaPlayer的生命周期。第85页,共280页。 MediaPlayer对象的生命周期第86页,共280页。res资源中的音乐文件存储在应用程序的res资源中的音乐文件,使用create()方法创建MediaPlayer对象。由于create()方法中已经封装了初始化及同步的方法,故不需要再进行setDataSo

41、urce()初始化及prepare()同步操作。案例:MediaPlayer mplayer= MediaPlayer.create(this,R.raw.test);第87页,共280页。存放在SD卡的音乐文件存储在SD卡中的多媒体文件,需要调用new()方法创建MediaPlayer对象,再调用setDataSource()方法设置多媒体数据来源。案例:MediaPlayer mplayer = new MediaPlayer();String str=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_

42、DOWNLOADS)+/music.mp3;mplayer.setDataSource(str);mplayer.prepare();第88页,共280页。播放要播放音频文件,则调用start()方法。例如:mplayer.start();要暂停,则调用pause()方法。要停止,则调用stop()方法。释放占用资源在音频文件播放结束时,调用release()释放播放器占用的系统资源。如果要重新播放音频文件,则需要调用reset()返回到空闲状态。第89页,共280页。【例3-1】设计一个音乐播放器, 播放项目资源中的音乐音乐播放器运行效果第90页,共280页。停止播放的事件,可作如下改进,以

43、便于重新激活播放. Override public void onClick(View v) mp.stop(); Start.setImageResource(R.drawable.music_play); try mp= MediaPlayer.create(Localmp3Activity.this, R.raw.abc); mp.setLooping(true); catch(Exception e) Log.e(mp3play error); 第91页,共280页。3.1.4 播放SDcard里的文件模拟器启动后,使用Android studio的DDMS调试工具查看 File Ex

44、plorer。默认情况下无法显示emulated下面的子目录。需要用adb root命令,然后才能访问文件和子目录,也能删除文件。第92页,共280页。在AndroidManifest.xml清单中申请权限。第93页,共280页。动态申请权限Android 6.0后的版本权限不但要在清单中加入,而且要在运行时动态申请,方法如下。在控制文件的onCreate()方法中调用上述的verifyStoragePermissions (Activity activity)方法。/ Storage Permissionsprivate static final int REQUEST_EXTERNAL_S

45、TORAGE = 1;private static String PERMISSIONS_STORAGE = Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE;public static void verifyStoragePermissions(Activity activity) / Check if we have read permission int permission = ActivityCompat.checkSelfPermission(activity,

46、 Manifest.permission.READ _EXTERNAL_STORAGE); if (permission != PackageManager.PERMISSION_GRANTED) / We dont have permission so prompt the user ActivityCompat.requestPermissions( activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE ); 第94页,共280页。设置多媒体数据来源需要调用setDataSource()方法例如:String filename= E

47、nvironment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+/abc.mp3;mediaplay.setDataSource(str);第95页,共280页。【例3-2】设计一个音乐播放器, 播放SD卡中的音乐将音频文件abc.mp3复制到SD卡中。音乐播放器运效果 第96页,共280页。3.2 视频播放Android实现视频播放的应用程序有两种:MediaPlayer + SurfaceViewMediaController + VideoView第一种方法是基础,可以编程控制播放器的大小和位置。

48、第二种方法使用起来更方便,但由于是Android封装好的类,播放器的大小、位置等都不接受编程控制。第97页,共280页。3.2.1 应用媒体播放器播放视频【例3-3】应用媒体播放器组件MediaPlayer设计一个视频播放器第98页,共280页。SurfaceView + MediaPlayer 调用示范SurfaceView surfaceView = (SurfaceView)findViewById(R.id.surfaceView);SurfaceHolder sh = surfaceView.getHolder();下面是访问项目资源内的视频:mediaPlayer = new Me

49、diaPlayer();mediaPlayer = MediaPlayer.create(this,R.raw.video); /设置数据源mediaPlayer.setDisplay(sh);mediaPlayer.start();下面是访问Sdcard的视频:path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+/sample.3gp;mMediaPlayer.setDataSource(path);/设置数据源mMediaPlayer.setDisplay(sh);mMe

50、diaPlayer.prepare();mMediaPlayer.start();第99页,共280页。3.2.2 应用视频视图播放视频VideoView是系统自带的视频播放控件,自带进度条、暂停、播放等功能,使用起来十分简单,只需要为控件设置好播放路径,判断监听是否准备就绪,直接播放即可。 第100页,共280页。3.3 录音与拍照3.3.1 MediaRecorder类Android系统提供了两种API用于实现录音功能:AudioRecord和MediaRecorder。MediaRecorder已实现大量的封装,操作起来简单,而AudioRecord比较灵活,能实现更多的功能。Media

51、Recorder可以实现录音和录像,需要严格遵守API说明中的函数调用先后顺序。MediaRecoeder已经集成了录音、编码、压缩等,优点是大部分以及集成,直接调用相关接口即可,代码量小。第101页,共280页。3.3.1 MediaRecorder类创建录音对象。MediaRecorder mr = new MediaRecorder();设置录音文件。AMR格式多用于人声,适合通话录音。例如:File soundFile = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+.amr

52、);if(!soundFile.exists() try soundFile.createNewFile(); catch (IOException e) mr.setOutputFile(soundFile.getAbsolutePath(); 第102页,共280页。在AndroidManifest.xml中增加音频捕获权限第103页,共280页。程序的运行结果3.3.3 拍照【例3-6】使用Intent设计一个简易照相机。第104页,共280页。3.4 实战演练音乐播放器修改【例3-2】加入进度条SeekBar功能和退出QUIT功能。修改音乐播放器界面,功能包括:(1)播放/暂停、停止、

53、退出功能;(2)进度条显示播放进度,拖动进度条改变进度功能。第105页,共280页。THANKS第106页,共280页。Android应用开发案例教程 (Android Studio版) 第107页,共280页。contents010302040506Android UI设计图像和动画数据存储广播Broadcast与服务Service媒体播放与录制Activity与多个用户界面目 录07网络编程技术第108页,共280页。广播与服务 Chap 04第109页,共280页。第4章 目 录4.1 消息广播4.2 系统服务4.3 后台服务第110页,共280页。4.1消息广播 在Android中,有

54、一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。 这个广播跟我们传统意义中的电台广播有些相似之处。之所以叫做广播,就是因为它只负责“说”而不管你“听不听”,也就是不管你接收方如何处理。 广播可以被一个以上的应用程序所接收,也可能不被任何应用程序所接收。第111页,共280页。 Android广播机制三要素(1)广播(Broadcast):用于发送广播,是一种运用在应用程序之间的传递消息的机制。(2)广播接收器(Broadcast Receiver):用于接收广播,是对发出来的广播进行过滤、接收、响应的组件。(3)意图内容(Inte

55、nt):用于保存广播相关信息。1第112页,共280页。实现广播和接收机制有以下5个步骤(1)创建Intent对象,设置Intent对象的action.属性。Intent intent = new Intent();intent.setAction(abc);(2)编写需要广播的信息内容,将需要广播的信息封装到Intent中,通过Context的sendBroadcast()方法,将Intent广播出去。intent.putExtra(hello, 这是广播信息!)sendBroadcast(intent);3第113页,共280页。实现广播和接收机制有以下5个步骤(3) 编写一个继承Broa

56、dcastReceiver的广播接收器class TestReceiver extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) /* */ (4) 在配置文件AndroidManifest.xml中注册广播接收类。(5) 销毁广播接收器。在一定时间内广播接收器会被销毁。3第114页,共280页。【例4-1】一个简单的消息广播程序示例图4-1 简单的消息广播程序运行效果第115页,共280页。4.2 系统服务4.2.1 Android的系统服务介绍Android有许多标准

57、系统服务(SystemService),如窗口管理服务WindowManager,通知管理服务NotificationManager、振动管理服务Vibrator、电池管理服务BatteryManager等。系统服务实际上可以看作一个对象,通过Activity的getSystemService()方法可以获得指定对象(系统服务)。下面介绍两个常见的系统服务。第116页,共280页。 系统通知服务NotificationNotification是一种具有全局效果的通知,在手机的通知栏显示。当应用程序向系统发出通知时,它先以图标的形式显示在通知栏中,用户下拉通知栏可以查看通知的详细信息。Notif

58、ication提供了文字、声音、振动等属性。Notification主要涉及 Notification.Builder()方法和NotificationManager类。调用NotificationManager对象的notify() 方法把通知发送到状态栏。1第117页,共280页。 系统通知服务Notification通知服务管理器 NotificationManager通知服务 NOTIFICATION_SERVICE通知 Notification异步激发 PendingIntentNotification notification;NotificationManager m =(Not

59、ificationManager) getSystemService (NOTIFICATION_SERVICE);m.notify(0,notification);第118页,共280页。【例4-2】系统通知服务示例第119页,共280页。系统定时服务 AlarmManager又称为系统闹钟服务。可以为应用程序设定一个在未来某个时间唤醒的功能,在到达设定的时间后会广播之前注册的Intent。当闹钟响起,实际上是系统发出了为这个闹钟注册的广播,可自动开启目标应用。注册的闹钟在设备睡眠的时候仍然会保留,可以选择性地设置是否唤醒设备。只有当设备关闭或是重启的时候才会被清除。2第120页,共280页

60、。系统定时服务 AlarmManager系统定时服务 AlarmManager使用步骤如下。(1)获得ALarmManager实例。(2) 定义一个PendingIntent发出广播。(3) 调用ALarmManager方法,设置定时或重复提醒。2ALarmManager am=(ALarmManager)getSystemService(ALARM_SERVICE);第121页,共280页。AlarmManager服务主要有下面两种应用:(1)在指定时长执行某项操作 (2)周期性地执行某项操作【例4-3】 AlarmManager时钟服务示例第122页,共280页。4.2.2 系统功能的调用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论