4修改AndroidManifest.xml文件修改app/src/main/AndroidManifest.xml文件如下,设置MyReceiver的IntentFilter,并如下图所示。<?xml version="1.0" encoding-"utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.hellobroadcast"><applicationandroid:allowBackup-"true'android:icon="@mipmap/iclauncher'android:label-"@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activityandroid:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN"><category android:name="android.intent.category.LAUNCHER"/></intent-filter><lactivity><receiver android:name=".MainActivitySMyReceiver"><intent-filter><actionandroid:name="android.intent.action.TIMETICK"/></intent-filter></receiver></application></manifest>24
24 } } } 4 修改 AndroidManifest.xml 文件 修改 app/src/main/ AndroidManifest.xml 文件如下,设置 MyReceiver 的 Intent Filter,并如下 图所示。 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.hellobroadcast"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MainActivity$MyReceiver"> <intent-filter> <action android:name="android.intent.action.TIME_TICK"/> </intent-filter> </receiver> </application> </manifest>
5运行程序在Android实验箱上运行程序,观察和记录实验结果。可以观察到,每隔1分钟,在Android桌面右下角产生一个通知,可以点击打开。3.5结束工作1软件结束工作(1)关闭AndroidStudio、终端和文件浏览器。(2)关闭Ubuntu(单击屏幕右上角电源按钮,弹出列表,选择“ShutDown"项目)。(3)关闭VMware。(4)关闭Windows7。2硬件结束工作(1)关闭ARMCortexA9开发板电源开关,关闭实验箱电源开关。(2)拔下电源线和USB线并放入实验箱。(3)闭合实验箱。四实验报告1观察和记录实验数据与现象。2处理和解释实验数据与现象。3实验核心程序与代码。4实验总结与体会。五实验器材PC,Android实验箱,Windows7,VMware10.0,Ubuntu10.04,AndroidStudio2.025
25 5 运行程序 在 Android 实验箱上运行程序,观察和记录实验结果。 可以观察到,每隔 1 分钟,在 Android 桌面右下角产生一个通知,可以点击打开。 3.5 结束工作 1 软件结束工作 (1)关闭 Android Studio、终端和文件浏览器。 (2)关闭 Ubuntu(单击屏幕右上角电源按钮,弹出列表,选择“Shut Down”项目)。 (3)关闭 VMware。 (4)关闭 Windows7。 2 硬件结束工作 (1)关闭 ARM Cortex A9 开发板电源开关,关闭实验箱电源开关。 (2)拔下电源线和 USB 线并放入实验箱。 (3)闭合实验箱。 四 实验报告 1 观察和记录实验数据与现象。 2 处理和解释实验数据与现象。 3 实验核心程序与代码。 4 实验总结与体会。 五 实验器材 PC,Android 实验箱,Windows 7,VMware 10.0,Ubuntu 10.04,Android Studio 2.0
实验二Android应用开发2一实验自的1理解Android数据存储、SQLite数据库和ContentProvider基本原理。2掌握Android数据存储、SQLite数据库和ContentProvider应用程序设计方法。二实验原理2.1Android数据存储1SharedpreferencesSharedPreferences是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值-数据对,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreference对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。实现SharedPreferences存储的步骤如下(1)根据Context获取SharedPreferences对象:(2)利用editO方法获取Editor对象;(3)通过Editor对象存储key-value键值-数据对:(4)通过commitO方法提交数据。2 XML可扩展标记语言(ExtensibleMarkupLanguage,XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种充许用户对自已的标记语言进行定义的源语言。XML是标准通用标记语言(SGML)的子集,非常适合Web传输。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。3PULL解析器在Android系统中,很多资源文件中,很多都是XML格式,在Android系统中解析这些XMI的方式,是使用PULL解析器进行解析的,它和SAX解析一样,也是采用事件驱动进行解析的,当PULL解析器开始解析之后,可以调用它的nextO方法,来获取下一个解析事件(就是开始文档,结束文档,开始标签,结束标签),当处于某个元素时可以调用XmlPullParser的getAttributteO方法来获取属性的值,也可调用它的nextTextO获取本节点的值。2.2SQLite数据库1SQLite简介SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统。它的设计目标是嵌入式的,目前已经在很多嵌入式产品中使用了它。它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。2SQLite数据类型26
26 实验二 Android 应用开发 2 一 实验目的 1 理解 Android 数据存储、SQLite 数据库和 ContentProvider 基本原理。 2 掌握 Android 数据存储、SQLite 数据库和 ContentProvider 应用程序设计方法。 二 实验原理 2.1 Android 数据存储 1 Sharedpreferences SharedPreferences 是一种轻型的数据存储方式,它的本质是基于 XML 文件存储 key-value 键 值-数据对,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs 目录下。SharedPreference 对象本身只能获取数据而不支持存储和修改,存储修改是通过 Editor 对象实现。 实现 SharedPreferences 存储的步骤如下: (1)根据 Context 获取 SharedPreferences 对象; (2)利用 edit()方法获取 Editor 对象; (3)通过 Editor 对象存储 key-value 键值-数据对; (4)通过 commit()方法提交数据。 2 XML 可扩展标记语言(Extensible Markup Language,XML),用于标记电子文件使其具有结构性 的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定 义的源语言。XML 是标准通用标记语言(SGML)的子集,非常适合 Web 传输。XML 提供 统一的方法来描述和交换独立于应用程序或供应商的结构化数据。 3 PULL 解析器 在 Android 系统中,很多资源文件中,很多都是 XML 格式,在 Android 系统中解析这些 XML 的方式,是使用 PULL 解析器进行解析的,它和 SAX 解析一样,也是采用事件驱动进行解 析的,当 PULL 解析器开始解析之后,可以调用它的 next()方法,来获取下一个解析事件(就 是开始文档,结束文档,开始标签,结束标签),当处于某个元素时可以调用 XmlPullParser 的 getAttributte()方法来获取属性的值,也可调用它的 nextText()获取本节点的值。 2.2 SQLite 数据库 1 SQLite 简介 SQLite 是一款轻型的数据库,是遵守 ACID 的关联式数据库管理系统。它的设计目标是嵌 入式的,目前已经在很多嵌入式产品中使用了它。它占用资源非常的低,在嵌入式设备中, 可能只需要几百 K 的内存就够了。它能够支持 Windows/Linux/Unix 等等主流的操作系统, 同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java 等,还有 ODBC 接口,同样比 起 Mysql、PostgreSQL 这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都 快。SQLite 第一个 Alpha 版本诞生于 2000 年 5 月。 2 SQLite 数据类型
SQLite是一种专为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是:空值NULL、整数INTEGER、浮点数REAL、字符串TEXT和大数据BLOB。在SQLite中,并没有专门设计BOOLEAN和DATE类型,因为BOOLEAN型可以用INTEGER的O和1代替true和false,而DATE类型则可以拥有特定格式的TEXT、REAL和INTEGER的值来代替显示。为了能方便的操作DATE类型,SQLite提供了一组函数,详见:http://www.sqlite.org/lang_datefunc.html。这样简单的数据类型设计更加符合嵌入式设备的要求。关于SQLite的更多资料,参见:http://www.sqlite.org/。3SQLite方法在Android系统中提供了android.database.sqlite包,用于进行SQLite数据库的增、删、改、查工作。其主要方法如下:beginTransactionO:开始一个事务:closeO):关闭连接,释放资源:delete(Stringtable,StringwhereClause,StringwhereArgs):根据给定条件,删除记录;endTransactionO:结束一个事务;execSQL(Stringsql):执行给定SQL语句:insert(Stringtable,StringnullColumnHack,ContentValuesvalues):根据给定条件,插入记录;openOrCreateDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory):根据给定条件连接数据库,如果此数据库不存在,则创建:query(String table, String columns, String selection, Stringl] selectionArgs, String groupBy, Stringhaving,StringorderBy):执行查询;rawQuery(Stringsql,StringselectionArgs):根据给定SQL,执行查询;update(Stringtable,ContentValuesvalues,StringwhereClause,StringwhereArgs):根据给定条件,修改符合条件的记录。除了上述主要方法外,Android还提供了诸多实用的方法。2.3ContentProvider1.Content ProviderAndroid中的内容提供器Contentprovider机制可支持在多个应用中存储和读取数据。这也是跨应用共享数据的唯一方式。在Android系统中,没有一个公共内存区域,供多个应用共享存储数据。Android提供了一些主要数据类型的ContentProvider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些Android提供的ContentProvider。可以获得这些ContentProvider,查询它们包含的数据,当然前提是已获得适当的读取权限。总的来说:内容提供器是应用程序之间共享数据的接口,Android系统将这种机制应用到方方面面。比如:联系人提供器专为不同应用程序提供联系人数据:设置提供器专为不同应用程序提供系统配置信息,包括内置的设置应用程序等。2Uri类简介Uri代表了要操作的数据,Uri主要包含了两部分信息:(1)需要操作的ContentProvider,(2)对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:1)scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://。2)主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标27
27 SQLite 是一种专为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是:空值 NULL、 整数 INTEGER、浮点数 REAL、字符串 TEXT 和大数据 BLOB。在 SQLite 中,并没有专门 设计 BOOLEAN 和 DATE 类型,因为 BOOLEAN 型可以用 INTEGER 的 0 和 1 代替 true 和 false,而 DATE 类型则可以拥有特定格式的 TEXT、REAL 和 INTEGER 的值来代替显示。 为了能方便的操作 DATE 类型, SQLite 提 供 了 一 组 函 数 , 详 见 : http://www.sqlite.org/lang_datefunc.html。这样简单的数据类型设计更加符合嵌入式设备的要 求。关于 SQLite 的更多资料,参见:http://www.sqlite.org/。 3 SQLite 方法 在 Android 系统中提供了 android.database.sqlite 包,用于进行 SQLite 数据库的增、删、改、 查工作。其主要方法如下: beginTransaction(): 开始一个事务; close(): 关闭连接,释放资源; delete(String table, String whereClause, String[] whereArgs): 根据给定条件,删除记录; endTransaction(): 结束一个事务; execSQL(String sql): 执行给定 SQL 语句; insert(String table, String nullColumnHack, ContentValues values): 根据给定条件,插入记录; openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory): 根据给定条件连接 数据库,如果此数据库不存在,则创建; query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy): 执行查询; rawQuery(String sql, String[] selectionArgs): 根据给定 SQL,执行查询; update(String table, ContentValues values, String whereClause, String[] whereArgs): 根据给定条 件,修改符合条件的记录。 除了上述主要方法外,Android 还提供了诸多实用的方法。 2.3 ContentProvider 1. Content Provider Android 中的内容提供器 Content provider 机制可支持在多个应用中存储和读取数据。这也是 跨应用共享数据的唯一方式。在 Android 系统中,没有一个公共内存区域,供多个应用共享 存储数据。 Android 提供了一些主要数据类型的 Content Provider,比如音频、视频、图片和私人通讯录 等。可在 android.provider 包下面找到一些 Android 提供的 Content Provider。可以获得这些 Content Provider,查询它们包含的数据,当然前提是已获得适当的读取权限。 总的来说:内容提供器是应用程序之间共享数据的接口,Android 系统将这种机制应用到方 方面面。比如:联系人提供器专为不同应用程序提供联系人数据;设置提供器专为不同应用 程序提供系统配置信息,包括内置的设置应用程序等。 2 Uri 类简介 Uri 代表了要操作的数据,Uri 主要包含了两部分信息: (1)需要操作的 ContentProvider , (2)对 ContentProvider 中的什么数据进行操作,一个 Uri 由以下几部分组成: 1)scheme:ContentProvider(内容提供者)的 scheme 已经由 Android 所规定为:content://。 2)主机名(或 Authority):用于唯一标识这个 ContentProvider,外部调用者可以根据这个标
识来找到它。3)路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:要操作contact表中id为10的记录,可以构建这样的路径:/contact/10;要操作contact表中id为10的记录的name字段,可以构建这样的路径:contact/10/name:要操作contact表中的所有记录,可以构建这样的路径:/contact。要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下:要操作XML文件中contact节点下的name节点,可以构建这样的路径:/contact/name如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:Uriuri=Uri.parse("content://com.changcheng.provider.contactprovider/contact")3ContentResolverContentResolver提供了诸如insert(,delete(,queryO和updateO之类的方法。用于实现对ContentProvider中数据的存取操作。Uri是一个通用资源标志符,将其分为A,B,C,D四个部分:A:无法改变的标准前缀,包括:"content:/"、"tel:/"等。当前缀是"content:/"时,说明通过一个ContentProvider控制这些数据;B:URI的标识,它通过authorities属性声明,用于定义了是哪个ContentProvider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的类名。例如:"content://com.example.ex03_03.mainactivity";C:路径,可以近似的理解为需要操作的数据库中表的名字,例如:"content://hx.android.text.myprovider/name"中的name;D:如果URI中包含表示需要获取的记录的ID,则就返回该id对应的数据:如果没有ID,就表示返回全部。三实验内容3.1数据存取1使用AndroidStudio创建项目应用程序名:HelloSharedPreferences(加学号作为后缀,后续操作凡是涉及HelloSharedPreferences都加后缀,不再赞述)。公司域名:com.example(默认)。包名:com.example.hellosharedpreferences(默认,自动加上学号后缀)。应用程序存放位置:学号目录。MinimumSDK:API15:Android4.0.3(IceCreamSandwich)。活动:EmptyActivity。活动名:MainActivity(默认)。布局名:activity_main(默认)。项目视图:project。如下图所示。28
28 识来找到它。 3)路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下: 要操作 contact 表中 id 为 10 的记录,可以构建这样的路径:/contact/10; 要操作 contact 表中 id 为 10 的记录的 name 字段,可以构建这样的路径:contact/10/name; 要操作 contact 表中的所有记录,可以构建这样的路径:/contact。 要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下: 要操作 XML 文件中 contact 节点下的 name 节点,可以构建这样的路径:/contact/name 如果要把一个字符串转换成 Uri,可以使用 Uri 类中的 parse()方法,如下: Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact") 3 ContentResolver ContentResolver 提供了诸如 insert(), delete(), query()和 update()之类的方法。用于实现对 ContentProvider 中数据的存取操作。 Uri 是一个通用资源标志符,将其分为 A,B,C,D 四个部分: A:无法改变的标准前缀,包括:"content://"、"tel://"等。当前缀是"content://"时,说明通 过一个 ContentProvider 控制这些数据; B:URI 的标识,它通过 authorities 属性声明,用于定义了是哪个 ContentProvider 提供这些 数据。对于第三方应用程序,为了保证 URI 标识的唯一性,它必须是一个完整的、小写的 类名。例如:"content://com.example.ex03_03.mainactivity"; C:路径,可以近似的理解为需要操作的数据库中表的名字,例如: "content://hx.android.text.myprovider/name"中的 name; D:如果 URI 中包含表示需要获取的记录的 ID,则就返回该 id 对应的数据;如果没有 ID,就表示返回全部。 三 实验内容 3.1 数据存取 1 使用 Android Studio 创建项目 应 用 程 序 名 : HelloSharedPreferences ( 加 学 号 作 为 后 缀 , 后 续 操 作 凡 是 涉 及 HelloSharedPreferences 都加后缀,不再赘述)。 公司域名:com.example(默认)。 包名:com.example.hellosharedpreferences(默认,自动加上学号后缀)。 应用程序存放位置:学号目录。 Minimum SDK: API 15: Android4.0.3 (IceCreamSandwich)。 活动:Empty Activity。 活动名:MainActivity(默认)。 布局名:activity_main(默认)。 项目视图:project。 如下图所示