Android基础总结(一)

来源:互联网 发布:红蜘蛛软件破解网络 编辑:程序博客网 时间:2024/06/07 01:57

1. 前言

1.1. 什么是3G4G

Ÿ 第三代移动通信技术(3rd - Generation),速率一般在几百Kbps,较之前的2G2.5G在数据传输速度上有很大提升。

Ÿ 第四代移动通信技术(4th - Generation),速度可达到100Mbps以上,几乎可以满足人们的所有传输数据的需求。

Ÿ 目前主流的3G技术标准有三种:

WCDMA:全球80%以上的3G网络都是采用此种制式。中国联通运营。186

CDMA2000:目前日韩及北美使用较多。中国电信运营。 189

TD-SCDMA:中国自主知识产权的3G通信技术。中国移动运营。 188 

Ÿ 目前主流的4G技术为LTE,但还没有被广泛应用:

GSM à GPRS à EDGE à WCDMA à HSDPA à HSDPA+ à LTE

1.2. 什么是Android 

 

Ÿ Android本义指机器人”,Google2007115日宣布的基于Linux平台的开源手机操作系统的名称,官方中文名:安卓 。

Ÿ Android系统早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营

Ÿ 底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,大部分程序以Java语言编写。

Ÿ 由于Android系统的开源特性,很多制造商都在生产Android系统的设备,如:摩托罗拉、HTC、三星、索爱、LG、小米、华为、魅族等。

Ÿ Android系统除了运行在智能手机上之外,还可以用做平板电脑、电视、汽车等很多设备上。

Ÿ Android系统架构图:

 

 

1.3. Android的版本升级

Ÿ 1.5 Cupcake(纸杯蛋糕)

拍摄/播放影片,并支持上传到Youtube

支持立体声蓝牙耳机,同时改善自动配对性能

最新的采用WebKit技术的浏览器,支持复制/贴上和页面中搜索

GPS性能大大提高

提供屏幕虚拟键盘

主屏幕增加音乐播放器和相框widgets

应用程序自动随着手机旋转

短信、Gmail、日暦,浏览器的用户接口大幅改进,如Gmail可以批量删除邮件

相机启动速度加快,拍摄图片可以直接上传到Picasa

来电照片显示

Ÿ 1.6 Donut(甜甜圈)

重新设计的Android Market 

手势支持 

支持CDMA网络 

文字转语音系统(Text-to-Speech) 

快速搜索框 

全新的拍照接口 

查看应用程序耗电 

支持虚拟私人网络(VPN) 

支持更多的屏幕分辨率。 

支持OpenCore2媒体引擎 

新增面向视觉或听觉困难人群的易用性插件

Ÿ 2.1 Éclair(闪电泡芙)

优化硬件速度

"Car Home"程序

支持更多的屏幕分辨率

改良的用户界面

新的浏览器的用户接口和支持HTML5

新的联系人名单

更好的白色/黑色背景比率

改进Google Maps 3.1.2

支持Microsoft Exchange

支持内置相机闪光灯

支持数码变焦

改进的虚拟键盘

支持蓝牙2.1

支持动态桌面的设计

Ÿ 2.2 Froyo冻酸奶)

支持将软件安装至扩展内存

集成Adobe Flash 10.1支持

加强软件即时编译的速度

新增软件启动"快速"至电话和浏览器

USB分享器和WiFi热点功能

支持在浏览器上传档案

更新Market中的批量和自动更新

增加对Microsoft Exchange的支持(安全政策, auto-discovery, GAL look-up

集成Chrome的V8 JavaScript引擎到浏览器

加强快速搜索小工具

更多软件能透过Market更新,类似2.0/2.1中的Map更新

速度和性能优化

Ÿ 2.3 Gingerbread姜饼

修补UI

支持更大的屏幕尺寸和分辨率(WXGA及更高)

系统级复制粘贴

重新设计的多点触摸屏幕键盘

本地支持多个镜头(用于视频通话等)和更多传感器(陀螺仪、气压计等)

电话簿集成Internet Call功能

支持近场通信(NFC) 

强化电源、应用程序管理功能

新增下载管理员

优化游戏开发支持

多媒体音效强化

从YAFFS转换到ext4文件系统

开放了屏幕截图功能

对黑色及白色的还原更加真实

Ÿ 3.x Honeycomb蜂巢)

仅供平板电脑使用

Google eBooks上提供数百万本书

支持平板电脑大萤幕、高分辨率

新版Gmail

Google Talk视讯功能

3D加速处理

网页版Market(Web store)详细分类显示,依个人Android分别设定安装应用程序

新的短消息通知功能

专为平板电脑设计的用户界面(重新设计的通知列与系统列)

加强多任务处理的接口

重新设计适用大屏幕的键盘及复制粘贴功能

多个标签的浏览器以及私密浏览模式

快速切换各种功能的相机

增强的图库与快速滚动的联络人接口

更有效率的Email接口

支持多核心处理器

3.2优化7吋平板显示

Ÿ 4.0 Ice Cream Sandwich奶油三明治)

虚拟按键,增大屏幕面积同时控制手机整体大小

桌面插件Widgets列表呈现在标签页中,与程序列表类似并且共存

文件夹更容易创建和管理,与iOS类似

可定制的桌面系统

可视语音邮件  

日历支持缩放操作

Gmail离线搜索,两行预览,以及底部新快捷栏

音量下键+电源键组合截图

改进虚拟键盘纠错

从锁屏界面直接访问应用程序

优化复制粘贴

新版浏览器

新的Roboto字体

流量控制系统

相机应用

人脸识别,刷脸解锁

内置照片编辑器

多任务列表

新的图库布局和组织方式

联系人应用整合社交网络信息

Android Beam

http://digi.tech.qq.com/a/20111019/001579.htm

1.4. 主流智能手机操作系统

 

2. 搭建开发环境

2.1. 所需资源

Ÿ JDKJava开发环境。下载地址:http://www.oracle.com

Ÿ EclipseIBM公司开发的一款开源IDEhttp://www.eclipse.org

Ÿ Android SDKAndroid 开发工具,包含开发Android程序所需类库、源码、文档、案例等资源。http://www.android.com

Ÿ ADT插件,ADT 是 Eclipse 平台下用来开发 Android 应用程序的插件http://www.android.com

2.2. Eclipse安装ADT插件

2.3. 配置SDK路径

 

2.4. 启动虚拟机

Ø 点击机器人图标

 

Ø 弹出虚拟机管理器

 

 

Ø 修改虚拟机默认目录

指定环境变量android_sdk_home,通常指定为SDK所在目录,可以随意指定。

重启Eclipse之后将会以这个目录作为存放虚拟机文件的位置。

 

 

Ø 配置虚拟机

Ÿ Name:虚拟机的名字,可随意定义

Ÿ Target:虚拟机版本

Ÿ SD Card - Size:虚拟机的SDCard大小,会在本地硬盘创建指定大小的文件用来存储数据,模拟真实手机的SDCard

如果使用原有文件,可以选择File并点击Browse指定文件

Ÿ Snapshot: 保存快照,可以提高虚拟机启动速度

Ÿ Skin - Built-in:选择分辨率

HVGA480x320

QVGA320x240

WQVGA400400x240

WQVGA432432x240

WVGA800800x480

WVGA854854x480

也可以选择Resolution自行指定

 

 

 

 

Ø 成功进入Android操作系统界面

 

Ÿ 如果虚拟机显示无信号,需要对电脑的网络连接进行配置

无论电脑是否联网,IP地址、子网掩码、默认网关、首选DNS服务器都需要配置

Ÿ 电脑如果未连接局域网或互联网,可以见默认网关和首选DNS服务器配置成本机IP,例如:

 

 

Ÿ 电脑如果已连接局域网,需要将网关和首选DNS服务器进行设置,例如:

 

 

Ÿ 如果电脑已连接互联网,正常情况虚拟机不会显示无信号,重启虚拟机

2.5. 命令行操作

为了能在任意目录使用一下命令,需要将SDK目录下的platform-tools文件夹路径和tools文件夹路径配置到path环境变量中

Ÿ 列出可以使用的android版本

android list targets

Ÿ 列出可以使用的虚拟机

android list avd

Ÿ 创建虚拟机

android create avd –n <虚拟机名> -t <Target版本ID> -c <SD卡大小> -s <屏幕尺寸>

Ÿ 启动虚拟机

emulator –avd <虚拟机名>

Ÿ 显示已连接的设备

adb devices

Ÿ 导入文件到手机

adb push <Windows源文件路径> <手机目标路径>

Ÿ 从手机导出文件

adb pull <手机源文件路径> <Windows目录路径>

Ÿ 安装程序

adb install <apk文件路径>

Ÿ 卸载程序

adb uninstall <包名>

Ÿ 重启adb

adb kill-server

abd start-server

 

3. 开发一个Android程序

3.1. 创建Android程序

 

 

 

 

 

Ø 创建Android Project

Ÿ Project name:项目名

Ÿ Build TargetAndroid版本

Ÿ Application name:程序名,显示在程序列表中,以及程序启动后的标题栏

Ÿ Package name:包名,程序的唯一标识

Ÿ Create Activity:选择程序启动时是否创建一个窗体,设置主窗体名字

Ÿ Min SDK Version:设置运行该程序所需的最低版本

3.2. 安装、卸载程序

Ÿ Eclipse安装

右键点击工程 – Run as – Android Application

Ÿ 虚拟机卸载

设置 – 应用程序 – 管理应用程序 – 选中要卸载的程序 – 卸载

3.3. 了解项目目录结构

Ÿ src:源代码

Ÿ gen:系统自动生成的文件

R.java 中记录了项目中各种资源ID

Ÿ res:系统资源,所有文件都会在R文件生成资源ID

drawable:图片

layout:界面布局

values:数据

anim:定义动画的XML

raw:原生文件

Ÿ assets:资源路径,不会在R文件注册

Ÿ project.properties:供Eclipse使用,读取该项目使用Android版本号。早期版本名为:default.properties

Ÿ AndroidManifest.xml:清单文件,在软件安装的时候被读取

Android中的四大组件(ActivityContentProviderBroadcastReceiverService)都需要在该文件中注册

程序所需的权限也需要在此文件中声明,例如:电话、短信、互联网、访问SD

Ÿ bin:二进制文件,包括class、资源文件、dexapk

Ÿ proguard.cfg:用来混淆代码的配置文件,防止别人反编译

3.4. 程序启动过程

Ÿ Eclipse.java源文件编译成.class

Ÿ 使用dx工具将所有.class文件转换为.dex文件

Ÿ 再将.dex文件和所有资源打包成.apk文件

Ÿ 将.apk文件安装到虚拟机完成程序安装

Ÿ 启动程序 – 开启进程 – 开启主线程

Ÿ 创建Activity对象 – 执行OnCreate()方法

Ÿ 按照main.xml文件初始化界面

4. 演示案例

4.1. 电话拨号

 

Ÿ 搭建界面需要组件:TextViewEditTextButton

Ÿ 当点击Button时获取EditText中文本

Ÿ 使用Intent向系统内置的电话拨号器发送意图拨打电话

Ÿ 注册拨打电话权限

4.2. 查看程序错误信息

Ÿ Android程序中如果出错,错误不会显示在Console中,而是显示在LogCat界面下。可以从window – show view中打开

Ÿ 日志信息分为5个级别:verbose > debug > info > warn > error 高级的包含低级的

Ÿ 可以创建过滤器对日志进行过滤显示,点击绿色加号,可以按照tagpidlevel进行筛选

 

4.3. 将程序安装到真实手机

Ÿ 在电脑上安装手机驱动

有些手机自带驱动,有些没有,可以从官网下载。或者可以使用“豌豆荚”软件自动安装。

Ÿ 在手机设置中打开USB调试,将手机用USB数据线连接到电脑

我的手机是:三星 i9100  

双核1228MHz、1GB RAM 、4GB ROM、480×800像素、Android 2.3、4.3英寸

Ÿ 检查Eclipse的设备管理器中是否显示出新设备

如果未能显示出设备,检查驱动安装是否正常,USB调试是否打开

Ÿ Eclipse安装程序

Eclipse上右键点击工程 – Run as – Android Application – 自动安装运行

Ÿ 手动打包安装

右键点击工程 – Export – Export Android Application – 选择或创建密钥对程序签名并打包生成apk文件

apk文件放到手机的SD卡中,通过手机文件浏览器执行安装

 

4.4. 短信发送

 

Ÿ 搭建界面需要组件:TextViewEditTextButton

Ÿ 给Button添加监听器,当被点击的时候获取号码,获取内容

Ÿ 使用SmsManager发送短信

Ÿ 需要注册短信发送权限

4.5. 布局

Ø RelativeLayout(相对布局)

Ÿ android-sdk-windows/docs/guide/topics/ui/layout-objects.html#relativelayout

 

Ø TableLayout(表格布局)

android-sdk-windows/docs/guide/topics/ui/layout-objects.html#tablelayout

Ø FrameLayout(帧布局)

android-sdk-windows/docs/guide/topics/ui/layout-objects.html#framelayout

 

 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

4.6. Junit

Ø 项目中添加测试类

Ÿ 在AndroidManifest.xml清单文件中添加配置

<instrumentation android:targetPackage="cn.itcast.junit" android:name="android.test.InstrumentationTestRunner" />

<uses-library android:name="android.test.runner" />

Ÿ 定义一个类继承AndroidTestCase,定义测试方法

Ÿ 在Outline视图下右键点击测试方法 – Run as – Android Junit Test

Ø 创建测试项目

Ÿ 创建Android Test Project

Ÿ 输入项目名,选择一个已存在的工程,Eclipse可以自动配置Junit环境

4.7. 日志信息

Ÿ 在LogCat视图中我们可以看到程序的日志信息,也可以在程序中输出信息到LogCat

Ÿ 程序中我们可以使用Log类来输出信息

Ÿ System.outSystem.err输出的信息也会显示在LogCat中,注意System.out输出信息是Info级别,System.errWarn级别

5. 文件操作(FileXMLSharedPreferences

5.1. 读写文件

 

 

Ø 写入文件到SD

Ÿ 需要在清单文件中注册权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Ÿ 2.1版本以下的SDCard位置和2.2之后版本不同

可以通过Environment.getExternalStorageDirectory()获取当前SDCard位置,兼容所有版本

Ÿ 获取SDCard状态

通过Environment.getExternalStorageState()方法获取SDCard当前状态

常量 Environment.MEDIA_MOUNTED 为已安装

 

Ø 写入文件

Ÿ 通过Context.openFileOutput(String name, int mode)可以获取一个文件输入流

name为文件名,mode为文件模式,有4种模式

输出流指向路径为:/data/data/包名/files/ 

Ÿ 文件模式在Context中有定义常量

MODE_PRIVATE 私有

MODE_WORLD_READABLE 其他程序可读(不可写)

MODE_WORLD_WRITEABLE 其他程序可写(不可读)

模式可以组合使用,例如:MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE

MODE_APPEND 追加

Ø 读取文件

Ÿ 通过Context.openFileInput(String name)可以获取一个文件输入流

该输入流可以读取 /data/data/包名/files/ 路径下的文件

Ÿ 获取当前程序Files文件路径

ContextWrapper.getFilesDir()

5.2. XML

Ø Pull简介

Ÿ 常见的XML解析方式有三种,DOMSAXPullAndroid系统中推荐使用Pull

Ÿ Pull解析器是一个开源的Java项目,Android系统内部解析XML文件均为此种方式,也可用于JavaEE项目

Ÿ Android SDK中已经集成了Pull解析器,无需添加任何jar文件

Ÿ Pull解析器运行方式与SAX类似,提供各种事件的判断

Ÿ 官方网站:http://xmlpull.org/

Ø 使用Pull解析器解析XML文件

Ÿ Xml.newPullParser() 获得解析器

Ÿ parser.setInput(in, "UTF-8") 设置输入流以及编码

Ÿ parser.next() 获取下一个解析事件,得到一个事件代码

Ÿ XmlPullParser中定义了常量来标识各种解析事件

START_DOCUMENTEND_DOCUMENT START_TAG 、END_TAG TEXT 

Ø 使用XmlSerializer写出XML

Ÿ 使用以下方法生成XML,和XML文档顺序类似

startDocument

startTag

attribute

text

endTag

endDocument

5.3. 偏好设定(SharedPreferences) 

 

 

Ÿ 在程序中保存一些配置参数的时候我们经常使用SharedPreferences

Context.getSharedPreferences(String name,int mode)

该方法可以在/data/data/<package>/shared_pref/目录下创建一个以name命名的xml文件,mode文件为模式

Ÿ 存储偏好

调用edit()方法可以获取一个Editor对象,对数据进行存储,存储之后需要调用commit()保存到文件

Ÿ 读取偏好

获得SharedPreferences之后调用getString()getInt()等方法获取其中设置的值

Ÿ 在Activity中获取SharedPreferences

Activity中可以调用getPreferences(int mode)方法获得一个SharedPreferences,文件名和Activity名一致

 

6. 数据库(SQLite

6.1. SQLite特点

Ÿ Android平台中嵌入了一个关系型数据库SQLite,和其他数据库不同的是SQLite存储数据时不区分类型

例如一个字段声明为Integer类型,我们也可以将一个字符串存入,一个字段声明为布尔型,我们也可以存入浮点数。

除非是主键被定义为Integer,这时只能存储64位整数

Ÿ 创建数据库的表时可以不指定数据类型,例如:

CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20))

CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT, name)

Ÿ SQLite支持大部分标准SQL语句,增删改查语句都是通用的,分页查询语句和MySQL相同

SELECT * FROM person LIMIT 20 OFFSET 10

SELECT * FROM person LIMIT 10,20

6.2. 创建数据库

Ÿ 定义类继承SQLiteOpenHelper

Ÿ 声明构造函数,4个参数

Ÿ 重写onCreate()方法

Ÿ 重写upGrade()方法

Ÿ 注意:SQLite数据库中列一旦创建不能修改,如果一定要修改,需要重新创建表,拷贝数据

6.3. CRUD操作

Ÿ 和JDBC访问数据库不同,操作SQLite数据库无需加载驱动,不用获取连接,直接可以使用

获取SQLiteDatabase对象之后通过该对象直接可以执行SQL语句

SQLiteDatabase.execSQL()

SQLiteDatabase.rawQuery()

Ÿ getReadableDatabase()和getWritableDatabase()的区别

查看源代码后我们发现getReadableDatabase()在通常情况下返回的就是getWritableDatabase()拿到的数据库

只有在抛出异常的时候才会以只读方式打开

Ÿ 数据库对象缓存

getWritableDatabase()方法最后会使用一个成员变量记住这个数据库对象,下次打开时判断是否重用

Ÿ SQLiteDatabase封装了insert()delete()、update()、query()四个方法也可以对数据库进行操作

这些方法封装了部分SQL语句,通过参数进行拼接

6.4. 事务管理

Ÿ 在使用SQLite数据库时可以用SQLiteDatabase类中定义的相关方法控制事务

beginTransaction() 开启事务

setTransactionSuccessful() 设置事务成功标记

endTransaction() 结束事务

Ÿ endTransaction()需要放在finally中执行,否则事务只有到超时的时候才自动结束,会降低数据库并发效率

原创粉丝点击