Android平台开发简介_第1页
Android平台开发简介_第2页
Android平台开发简介_第3页
Android平台开发简介_第4页
Android平台开发简介_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

Android平台开发简介平台介绍及开发基本流程2011-4月什么是Android?Android是Google在2007年11月5日推出的开源手机操作系统。目前Android在中国的发展是非常火的,为了节省研发费用,国内很多的手机厂商和移动运营商纷纷加入到了android阵营,其中包括中国移动,中国联通,中国电信,华为,联想等大企业。在中国不管是知名的手机生产厂商还是山寨手机厂商,都已经开始生产Android操作系统的手机。另外android应用的范围不仅仅在手机,还被应用在汽车、平板电脑、和智能上网设备上,听说国外已经有了安装有Android系统,并且能够上网的智能电饭煲,用户在千里之外就可以操作电饭煲进行煮饭。由于大家大多使用的手机都属傻瓜手机,也就是打打电话、发发短信。从今天开始,大家就应该改变这个观念了,你们需要把智能手机看作是一台电脑,它能完成电脑所能完成的一切。所以你可以像在电脑一样,在智能手机上安装软件,以满足你工作和生活的需要。

如何安装AndroidSDK和Eclipse插件所需开发环境:JDK5或以上版本(仅有JRE不够)、Eclipse3.4或以上版本,推荐使用“伽利略”版。下载用于在Eclipse开发android应用的ADT插件在企业开发中,很多程序员使用EclipseIDE作为应用的开发环境。为了使得Android应用的创建,运行和调试更加方便快捷。Android的开发团队专门针对EclipseIDE定制了一个插件:AndroidDevelopmentTools(ADT)

下载地址:安装Eclipse插件(ADT)启动Eclipse,选择Help>InstallNewSoftware,在出现的对话框里,点击Add按钮,在对话框的name一栏输入“ADT”,然后点击Archive...,浏览和选择已经下载的ADT插件压缩文件。点击OK.。返回可用软件的视图,你会看到这个插件,然后选择DeveloperTools(会选中下面的“AndroidDeveloperTools”和“AndroidEditors“),点击Next,最后重启Eclipse。下载安装AndroidSDK:AndroidSDK包含了开发Android应用所依赖的jar文件、运行环境及相关工具。下载地址:

下载完SDK后,把.zip文件解压到你电脑上合适位置。启动Eclipse,选择window->preferences,在打开的视图左边点击android,在右边的SDKLocation中选择AndroidSDK所在位置。

开发第一个Android应用打开Eclipse,新建项目(点击FileNewProject),在项目列表中展开Android目录,选择AndroidProject,如下图:

开发第一个Android应用

开发第一个Android应用点击”finish”即可完成项目的创建,创建后的项目已经是一个可运行的Android应用,我们可以通过下面方式运行此应用:点击工具栏上机器人形状的虚拟设备管理器(简称“AVD“),如下:

开发第一个Android应用

“尚未注册网络”错误信息的解决办法打开Android模拟器时,出现无信号,拔打电话或发短信时,提示“尚未注册网络”错误信息的解决方案如下。

场景一:你的电脑没有连接上互联网,同时也没有在局域网。解决办法:右键点击网上邻居,选择"属性",在网络连接窗口中右键点击"本地连接",选择"属性",设置TCP/IP属性如下:IP地址

子网掩码

默认网关

首选DNS服务器

场景二:你的电脑没有连接上互联网,但在局域网。解决办法:右键点击网上邻居,选择"属性",在网络连接窗口中右键点击"本地连接",选择"属性",设置TCP/IP属性如下:IP地址:设置成你所在局域网的IP,如:00

子网掩码:设置成你所在局域网的掩码,如:

默认网关:设置成你所在局域网的网关,一般网关的IP格式为:*.*.*.1,如:

首选DNS服务器:设置成你所在局域网的路由器IP,一般路由器的IP格式为:*.*.*.1,如:

最后一种解决方案是:让你的电脑连接上互联网。

开发第一个Android应用在项目上右键点击runasAndroidapplication,如下图:

Android应用程序架构src/java原代码存放目录gen/自动生成目录gen目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。res/资源(Resource)目录在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。assets资源目录Android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径,如:file:///android_asset/xxx.3gpAndroidManifest.xml

项目清单文件这个文件列出了应用程序所提供的功能,以后你开发好的各种组件需要在该文件中进行配置,如果应用使用到了系统内置的应用(如电话服务、互联网服务、短信服务、GPS服务等等),你还需在该文件中声明使用权限。perties

项目环境信息,一般是不需要修改此文件Android中的显示单位位px(pixels)像素一般HVGA代表320x480像素,这个用用的比较多。。dip或dp(deviceindependentpixels)设备独立像素素这个和设备硬硬件有关,一一般为了支持持WVGA、HVGA和QVGA推荐使用这个个,不依赖像像素。sp(scaledpixels—bestfortextsize)比例像素主要处理字体体的大小,可可以根据系统统的字体自适适应。除了上面三个个显示单位,,下面还有几几个不太常用用:in(inches)英寸mm(millimeters)毫米pt(points)点,1/72英寸为了适应不不同分辨率率,不同的的像素密度度,推荐使使用dip,文字使用用sp。Android开发平台是是开放的平平台,而位位于四层框框架顶端的的应用开发发,必然涉涉及到Android组件。本文文将为大家家详细介绍绍Android组件。组件(Component),在谈及及所谓架构构和重用的的时候,是是一个重要要的事情。。很多时候候都会说基基于组件的的软件架构构,指的是是期望把程程序做乐高高似的,有有一堆接口口标准封装装完整的组组件放在哪哪里,想用用的时候取取上几个一一搭配,整整个程序就就构建完成成了。在开篇的时时候就在说说,Android是一个为组组件化而搭搭建的平台台,它引入入所谓Mash-Up的概念,这这使得你在在应用的最最上层,想想做的不组组件化都是是很困难的的一件事,,具体说来来,Android有四大组件件:Activity、Service、BroadcastReceiver、ContentProvider。Android四大组建Activity是为用户操操作而展示示的可视化化用户界面面。比如说说,一个activity可以展示一一个菜单项项列表供用用户选择,,或者显示示一些包含含说明的照照片。一个个短消息应应用程序可可以包括一一个用于显显示做为发发送对象的的联系人的的列表的activity,一个给选选定的联系系人写短信信的activity以及翻阅以以前的短信信和改变设设置的activity。尽管它们们一起组成成了一个内内聚的用户户界面,但但其中每个个activity都与其它的的保持独立立。每个都都是以Activity类为基类的的子类实现现。一个应用程程序可以只只有一个activity,或者,如如刚才提到到的短信应应用程序那那样,包含含很多个。。每个activity的作用,以以及其数目目,自然取取决于应用用程序及其其设计。一一般情况下下,总有一一个应用程程序被标记记为用户在在应用程序序启动的时时候第一个个看到的。。从一个activity转向另一个个的方式是是靠当前的的activity启动下一个个。每个activity都被给予一一个默认的的窗口以进进行绘制。。一般情况况下,这个个窗口是满满屏的,但但它也可以以是一个小小的位于其其它窗口之之上的浮动动窗口。一一个activity也可以使用用超过一个个的窗口───比如,,在activity运行过程中中弹出的一一个供用户户反应的小小对话框,,或是当用用户选择了了屏幕上特特定项目后后显示的必必要信息。。窗口显示的的可视内容容是由一系系列视图构构成的,这这些视图均均继承自View基类。每个个视图均控控制着窗口口中一块特特定的矩形形空间。父父级视图包包含并组织织它子视图图的布局。。叶节点视视图(位于于视图层次次最底端))在它们控控制的矩形形中进行绘绘制,并对对用户对其其直接操作作做出响应应。所以,,视图是activity与用户进行行交互的界界面。比如如说,视图图可以显示示一个小图图片,并在在用户指点点它的时候候产生动作作。Android有很多既定定的视图供供用户直接接使用,包包括按钮、、文本域、、卷轴、菜菜单项、复复选框等等等。Activity活动服务没有可可视化的用用户界面,,而是在一一段时间内内在后台运运行。比如如说,一个个服务可以以在用户做做其它事情情的时候在在后台播放放背景音乐乐、从网络络上获取一一些数据或或者计算一一些东西并并提供给需需要这个运运算结果的的activity使用。每个个服务都继继承自Service基类。一个媒体播播放器播放放播放列表表中的曲目目是一个不不错的例子子。播放器器应用程序序可能有一一个或多个个activity来给用户选选择歌曲并并进行播放放。然而,,音乐播放放这个任务务本身不应应该为任何何activity所处理,因因为用户期期望在他们们离开播放放器应用程程序而开始始做别的事事情时,音音乐仍在继继续播放。。为达到这这个目的,,媒体播放放器activity应该启用一一个运行于于后台的服服务。而系系统将在这这个activity不再显示于于屏幕之后后,仍维持持音乐播放放服务的运运行。你可以连接接至(绑定定)一个正正在运行的的服务(如如果服务没没有运行,,则启动之之)。连接接之后,你你可以通过过那个服务务暴露出来来的接口与与服务进行行通讯。对对于音乐服服务来说,,这个接口口可以允许许用户暂停停、回退、、停止以及及重新开始始播放。如同activity和其它组件件一样,服服务运行于于应用程序序进程的主主线程内。。所以它不不会对其它它组件或用用户界面有有任何干扰扰,它们一一般会派生生一个新线线程来进行行一些耗时时任务(比比如音乐回回放)。Service服务和接收收器广播接收器器是一个专专注于接收收广播通知知信息,并并做出对应应处理的组组件。很多多广播是源源自于系统统代码的───比如,,通知时区区改变、电电池电量低低、拍摄了了一张照片片或者用户户改变了语语言选项。。应用程序序也可以进进行广播───比如说说,通知其其它应用程程序一些数数据下载完完成并处于于可用状态态。应用程序可可以拥有任任意数量的的广播接收收器以对所所有它感兴兴趣的通知知信息予以以响应。所所有的接收收器均继承承自BroadcastReceiver基类。广广播接收器器没有用户户界面。然然而,它们们可以启动动一个activity来响应它们们收到的信信息,或者者用NotificationManager来通知用户户。通知可可以用很多多种方式来来吸引用户户的注意力力──闪动动背灯、震震动、播放放声音等等等。一般来来说是在状状态栏上放放一个持久久的图标,,用户可以以打开它并并获取消息息。BroadcastReceiver接收器内容提供者者将一些特特定的应用用程序数据据供给其它它应用程序序使用。数数据可以存存储于文件件系统、SQLite数据库或其其它方式。。内容提供供者继承于于ContentProvider基类,为其其它应用程程序取用和和存储它管管理的数据据实现了一一套标准方方法。然而而,应用程程序并不直直接调用这这些方法,,而是使用用一个ContentResolver对象,调用用它的方法法作为替代代。ContentResolver可以与任意意内容提供供者进行会会话,与其其合作来对对所有相关关交互通讯讯进行管理理。参阅独立的的内容提供供者章节获获得更多关关于使用内内容提供者者的内容。。每当出现一一个需要被被特定组件件处理的请请求时,Android会确保那个个组件的应应用程序进进程处于运运行状态,,或在必要要的时候启启动它。并并确保那个个相应组件件的实例的的存在,必必要时会创创建那个实实例。ContentProvider当接收到ContentResolver发出的请求求后,内容容提供者被被激活。而而其它三种种组件───activity、服务和广广播接收器器被一种叫叫做intent的异步消息息所激活。。intent是一个保存存着消息内内容的Intent对象。对于于activity和服务来说说,它指明明了请求的的操作名称称以及作为为操作对象象的数据的的URI和其它一些些信息。比比如说,它它可以承载载对一个activity的请求,让让它为用户户显示一张张图片,或或者让用户户编辑一些些文本。而而对于广播播接收器而而言,Intent对象指明了了声明的行行为。比如如,它可以以对所有感感兴趣的对对象声明照照相按钮被被按下。对于每种组组件来说,,激活的方方法是不同同的:通过传递一一个Intent对象至Context.startActivity()或Activity.startActivityForResult()以载入(或或指定新工工作给)一一个activity。相应的activity可以通过调调用getIntent()方法来查看看激活它的的intent。Android通过调用activity的onNewIntent()方法来传递递给它继发发的intent。

一个activity经常启动了了下一个。。如果它期期望它所启启动的那个个activity返回一个结结果,它会会以调用startActivityForResult()来取代startActivity()。比如说,,如果它启启动了另外外一个activity以使用户挑挑选一张照照片,它也也许想知道道哪张照片片被选中了了。结果将将会被封装装在一个Intent对象中,并并传递给发发出调用的的activity的onActivityResult()方法。组件的连接接者--Intent通过传递一一个Intent对象至Context.startService()将启动一个个服务(或或给予正在在运行的服服务以一个个新的指令令)。Android调用服务的的onStart()方法并将Intent对象传递给给它。与与此类似,,一个Intent可以被调用用组件传递递给Context.bindService()以获取一个个正在运行行的目标服服务的连接接。这个服服务会经由由onBind()方法的调用用获取这个个Intent对象(如果果服务尚未未启动,bindService()会先启动它它)。比如如说,一个个activity可以连接至至前述的音音乐回放服服务,并提提供给用户户一个可操操作的(用用户界面))以对回放放进行控制制。这个activity可以调用bindService()来建立连接接,然后调调用服务中中定义的对对象来影响响回放。应用程序可可以凭借将将Intent对象传递给给Context.sendBroadcast(),Context.sendOrderedBroadcast(),以及Context.sendStickyBroadcast()和其它类似似方法来产产生一个广广播。Android会调用所有有对此广播播有兴趣的的广播接收收器的onReceive()方法,将intent传递给它们们。Manifest文件当Android启动一个应应用程序组组件之前,,它必须知知道那个组组件是存在在的。所以以,应用程程序会在一一个manifest文件中声明明它的组件件,这个文文件会被打打包到Android包中。这个个.apk文件还将涵涵括应用程程序的代码码、文件以以及其它资资源。这个manifest文件以XML作为结构格格式,而且且对于所有有应用程序序,都叫做做AndroidManifest.xml。为声明一一个应用程程序组件,,它还会做做很多额外外工作,比比如指明应应用程序所所需链接到到的库的名名称(除了了默认的Android库之外)以以及声明应应用程序期期望获得的的各种权限限。但manifest文件的主主要功能仍仍然是向Android声明明应用程序序的组件。。举例说明明,一个activity可可以如下声声明:<activity>元素的name属性性指定了实实现了这个个activity的Activity的子类。icon和和label属性指指向了包含含展示给用用户的此activity的的图标和标标签的资源源文件。其它组件件也以类类似的方方法声明明──<service>元素用于于声明服服务,<receiver>元素用于于声明广广播接收收器,而而<provider>元素用于于声明内内容提供供者。manifest文件中未未进行声声明的activity、服务以以及内容容提供者者将不为为系统所所见,从从而也就就不会被被运行。。然而,,广播接接收器既既可以在在manifest文件中声声明,也也可以在在代码中中进行动动态的创创建,并并以调用用Context.registerReceiver()的方式注注册至系系统。如前所述述,一个个activity可以启动动另外一一个,甚甚至包括括与它不不处于同同一应用用程序之之中的。。举个例例子说,,假设你你想让用用户看到到某个地地方的街街道地图图。而已已经存在在一个具具有此功功能的activity了,那么么你的activity所需要做做的工作作就是把把请求信信息放到到一个Intent对象里面面,并把把它传递递给startActivity()。于是地地图浏览览器就会会显示那那个地图图。而当当用户按按下BACK键的时候候,你的的activity又会再一一次的显显示在屏屏幕上。。对于用户户来说,,这看起起来就像像是地图图浏览器器是你activity所在的应应用程序序中的一一个组成成部分,,其实它它是在另另外一个个应用程程序中定定义,并并运行在在那个应应用程序序的进程程之中的的。Android将这两个个activity放在同一一个任务务中来维维持一个个完整的的用户体体验。简简单的说说,任务务就是用用户所体体验到的的“应用用程序””。它是是安排在在一个堆堆栈中的的一组相相关的activity。堆栈中中的根activity就是启动动了这整整个任务务的那个个──一一般情况况下,它它就是用用户在应应用程序序加载器器中所选选择的。。而堆栈栈最上方方的activity则是当前前运行的的──用用户直接接对其进进行操作作的。当当一个activity启动另外外一个的的时候,,新的activity就被压入入堆栈,,并成为为当前运运行的activity。而前一一个activity仍保持在在堆栈之之中。当当用户按按下BACK键的时候候,当前前activity出栈,而而前一个个恢复为为当前运运行的activity。Activity和任务Activity生命周期期用户界面面UserInterface在一个Android应用中,,用户界界面是由由View和ViewGroup对象构建建的。View与ViewGroup都有很多多种类,,而它们们都是View类的子类类。ViewView对象是Android平台中用用户界面面体现的的基础单单位。View类是它称称为“widgets(工具))”的子子类的基基础,它它们提供供了诸如如文本输输入框和和按钮之之类的UI对象的完完整实现现。ViewGroup类同样为为其被称称为“Layouts(布局))”的子子类奠定定了基础础,它们们提供了了象流式式布局、、表格布布局以及及相对布布局之类类的布局局架构。。View对象是一一个数据据体,它它的属性性存储了了用于屏屏幕上一一块矩形形区域的的布局参参数及内内容。并并负责这这块它所所辖的这这个矩形形区域之之中所有有测量、、布局、、焦点转转换、卷卷动以及及按键/触摸手势势的处理理。作为为一个用用户界面面对象,,View同时也担担任着用用户交互互关键点点以及交交互事件件接受者者的角色色。布局Layout定义并展现现你的视图图层次的最最常用的方方法是使用用XML布局文件。。如同HTML一样,XML为布局提供供了一种可可读的结构构。XML中的每个元元素都是View或ViewGroup对象(抑或或它们的子子类)。View对象是树的的叶节点,,而ViewGroup对象是树的的分支(参参阅楼上的的视图层次次图)。XML元素的名称称与它体现现的Java类相对应。。所以一个个<TextView>元素将在你你的UI中生成一个个TextView,而<LinearLayout>则创建一个个LinearLayout视图组。当当你载入一一个布局资资源时,Android系统会根据据你布局中中的元素初初始化这些些运行时对对象。举例来说,,一个包含含文本视图图和一个按按钮的简单单垂直布局局如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello,IamaTextView"/><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello,IamaButton"/></LinearLayout>请注意:LinearLayout元素包含了了TextView和Button对象。你可可以在其中中另外安置置一个LinearLayout(或其它类类型的视图图组),以以延展这个个视图层次次,构建更更复杂的布布局。用户界面事事件UIEvents当你在用户户界面中加加入了一些些视图和工工具之后,,你可能想想要知道如如何让它们们与用户交交互,进而而实现你的的动作。如如欲获得用用户界面事事件通知,,你需要做做以下两件件事情之一一:•定义一个事事件侦听器器并将其注注册至视图图。通常情情况下,这这是你侦听听事件的主主要方式。。View类包含了一一大堆命名名类似On<什么什么>Listener的接口,每每个都带有有一个叫做做On<什么什么>()的回调方法法。比如::View.OnClickListener(用以处理理视图中的的点击),,View.OnTouchListener(用以处理理视图中的的触屏事件件),以及及View.OnKeyListener(用以处理理视图中的的设备按键键事件)。。所以,如如果你希望望你的视图图在它被””点击”((比如选择择了一个按按钮)的时时候获得通通知,你就就要实现OnClickListener,定义它的的onClick()回调方法((在其中进进行相应处处理),并并将它用setOnClickListener()方法注册到到视图上。。•为视图覆写写一个现有有的回调方方法。这种种方法主要要用于你自自己实现了了一个View类,并想侦侦听其上发发生的特定定事件。比比如说当屏屏幕被触摸摸(onTouchEvent()),当轨迹迹球发生了了移动(onTrackballEvent())或者是设设备上的按按键被按下下(onKeyDown())。这种方方式允许你你为自己定定制的视图图中发生的的每个事件件定义默认认的行为,,并决定是是否需要将将事件传递递给其它的的子视图。。再说一次次,这些是是View类相关的回回调方法,,所以你只只能在你构构建自定义义组件时定定义它们。。如何在视图图中处理用用户交互请请参见处理理用户界面面事件文档档。资源和资产产ResourcesandAssets资源是Android应用程序不不可或缺的的部分。总总体而言,,资源是你你想包含和和引入到应应用程序里里面的一些些外部元素素,比如图图片、音频频、视频、、文本字符符串、布局局、主题等等。每个Android应用程序包包含一个资资源目录((res/)和资产目目录(assets/),资产不不经常被使使用,因为为它们的应应用程序很很少。你仅仅在需要读读取原始字字节流时才才需要保存存数据为资资产。资源源和资产目目录均驻留留在Android项目树的顶顶端,和源源代码目录录(src/)处在同一一级上。资源和资产产从表面上上看没多大大区别,不不过总体上上,在存储储外部内容容时资源用用得更多。。真正的区区别在于任任何放置在在资源目录录里的内容容可以通过过您的应用用程序的R类访问,这这是被Android编译过的。。而任何存存放在资产产目录里的的内容会保保持它的原原始文件格格式,为了了读取它,,你必须使使用AssetManager来以字节流流的方式读读取文件。。所以保持持文件和数数据在资源源中(res/)中会更方方便访问。。目录Directory资源类型ResourceTypesres/anim/ XML文件,它们们被编译进进逐帧动画画(framebyframeanimation)或补间动动画(tweenedanimation)对象res/drawable/ .png、.9.png、.jpg文件,它它们被编编译进以以下的Drawable资源子类类型中::要获得这这种类型型的一个个资源,,可以使使用Resource.getDrawable(id)位图文件件9-patches(可变尺尺寸的位位图)为了获取取资源类类型,使使用mContext.getResources().getDrawable(R.drawable.imageId)注意:放放在这里里的图像像资源可可能会被被aapt工具自动动地进行行无损压压缩优化化。比如如,一个个真彩色色但并不不需要256色的PNG可能会被被转换为为一个带带调色板板的8位PNG。这使得得同等质质量的图图片占用用更少的的资源。。所以我我们得意意识到这这些放在在该目录录下的二二进制图图像在生生成时可可能会发发生变化化。如果果你想读读取一个个图像位位流并转转换成一一个位图图(bitmap),请把图图像文件件放在res/raw/目录下,,这样可可以避免免被自动动优化。。res/layout/被编译为为屏幕布布局(或或屏幕的的一部分分)的XML文件。参参见布局局声明((DeclaringLayout)res/values/可以被编编译成很很多种类类型的资资源的XML文件。注意:不像其他他的res/文件夹,,它可以以保存任任意数量量的文件件,这些些文件保保存了要要创建资资源的描描述,而而不是资资源本身身。XML元素类型型控制这这些资源源应该放放在R类的什么么地方。。尽管这个个文件夹夹里的文文件可以以任意命命名,不不过下面面使一些些比较典典型的文文件(文文件命名名的惯例例是将元元素类型型包含在在该名称称之中)):array.xml定义数据据colors.xml定义colordrawable和颜色的的字符串串值(colorstringvalues)。使用用Resource.getDrawable()和Resources.getColor()分别获得得这些资资源。dimens.xml定义尺寸寸值(dimensionvalue)。使用用Resources.getDimension()获得这些些资源。。strings.xml定义字符符串(string)值(使使用Resources.getString()或者Resources.getText()获取这些些资源。。getText()会保留在在UI字符串上上应用的的丰富的的文本样样式)。。• styles.xml定义样式(style)对象。res/xml/任意的XML文件,在运行行时可以通过过调用Resources.getXML()读取。res/raw/直接复制到设设备中的任意意文件。它们们无需编译,,添加到你的的应用程序编编译产生的压压缩文件中。。要使用这些些资源,可以以调用Resources.openRawResource(),参数是资源源的ID,即。数据存储与访访问很多时候我们们的软件需要要对处理后的的数据进行存存储或再次访访问。Android为数据存储提提供了多种方方式,分别有有如下几种::文件SharedPreferences(参数)SQLite数据库内容提供者((Contentprovider)网络使用文件进行行数据存储首先给大家介介绍使用文件件如何对数据据进行存储,,Activity提供了openFileOutput()方法可以用于于把数据输出出到文件中,,具体的实现现过程与在J2SE环境中保存数数据到文件中中是一样的。。publicclassFileActivityextendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){...FileOutputStreamoutStream=this.openFileOutput("itcast.txt",Context.MODE_PRIVATE);outStream.write(“ggggg".getBytes());outStream.close();}}openFileOutput()方法的第一参参数用于指定定文件名称,,不能包含路路径分隔符““/”,如果文件不不存在,Android会自动创建它它。创建的文文件保存在/data/data/<packagename>/files目录,如:,通过点击Eclipse菜单“Window”-“ShowView”-““Other”,在对话窗口口中展开android文件夹,选择择下面的FileExplorer视图,然后在在FileExplorer视图中展开/data/data/<packagename>/files目录就可以看看到该文件。。openFileOutput()方法的第二参参数用于指定定操作模式,,有四种模式式,分别为::Context.MODE_PRIVATE=0Context.MODE_APPEND=32768Context.MODE_WORLD_READABLE=1Context.MODE_WORLD_WRITEABLE=2使用文件进行行数据存储Context.MODE_PRIVATE:为默认操作作模式,代表表该文件是私私有数据,只只能被应用本本身访问,在在该模式下,,写入的内容容会覆盖原文文件的内容,,如果想把新新写入的内容容追加到原文文件中。可以以使用Context.MODE_APPENDContext.MODE_APPEND:模模式式会会检检查查文文件件是是否否存存在在,,存存在在就就往往文文件件追追加加内内容容,,否否则则就就创创建建新新文文件件。。Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来来控控制制其其他他应应用用是是否否有有权权限限读读写写该该文文件件。。MODE_WORLD_READABLE:表表示示当当前前文文件件可可以以被被其其他他应应用用读读取取;;MODE_WORLD_WRITEABLE:表表示示当当前前文文件件可可以以被被其其他他应应用用写写入入。。如果果希希望望文文件件被被其其他他应应用用读读和和写写,,可可以以传传入入::openFileOutput("itcast.txt",Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);android有一一套套自自己己的的安安全全模模型型,,当当应应用用程程序序(.apk)在安安装装时时系系统统就就会会分分配配给给他他一一个个userid,当当该该应应用用要要去去访访问问其其他他资资源源比比如如文文件件的的时时候候,,就就需需要要userid匹配配。。默默认认情情况况下下,,任任何何应应用用创创建建的的文文件件,,sharedpreferences,数数据据库库都都应应该该是是私私有有的的((位位于于/data/data/<packagename>/files),,其其他他程程序序无无法法访访问问。。除除非非在在创创建建时时指指定定了了Context.MODE_WORLD_READABLE或者者Context.MODE_WORLD_WRITEABLE,只只有有这这样样其其他他程程序序才才能能正正确确访访问问。。使用用SharedPreferences进行行数数据据存存储储很多多时时候候我我们们开开发发的的软软件件需需要要向向用用户户提提供供软软件件参参数数设设置置功功能能,,例例如如我我们们常常用用的的QQ,用用户户可可以以设设置置是是否否允允许许陌陌生生人人添添加加自自己己为为好好友友。。对对于于软软件件配配置置参参数数的的保保存存,,如如果果是是window软件件通通常常我我们们会会采采用用ini文件件进进行行保保存存,,如如果果是是j2se应用用,,我我们们会会采采用用properties属性性文文件件或或者者xml进行行保保存存。。如如果果是是Android应用,我们们最适合采采用什么方方式保存软软件配置参参数呢?Android平台给我们们提供了一一个SharedPreferences类,它是一一个轻量级级的存储类类,特别适适合用于保保存软件配配置参数。。使用SharedPreferences保存数据,,其背后是是用xml文件存放数数据,文件件存放在/data/data/<packagename>/shared_prefs目录下:SharedPreferencessharedPreferences=getSharedPreferences("itcast",Context.MODE_PRIVATE);Editoreditor=sharedPreferences.edit();//获取编辑器器editor.putString("name","传智播客");editor.putInt("age",4);mit();//提交修改生成的itcast.xml文件内容如如下:<?xmlversion='1.0'encoding='utf-8'standalone='yes'?><map><stringname="name">传智播客</string><intname="age"value="4"/></map>因为SharedPreferences背后是使用用xml文件保存数数据,getSharedPreferences(name,mode)方法的第一一个参数用用于指定该该文件的名名称,名称称不用带后后缀,后缀缀会由Android自动加上。。方法的第第二个参数数指定文件件的操作模模式,共有有四种操作作模式,这这四种模式式前面介绍绍使用文件件方式保存存数据时已已经讲解过过。如果希希望SharedPreferences背后使用的的xml文件能被其其他应用读读和写,可可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。另外Activity还提供了另另一个getPreferences(mode)方法操作SharedPreferences,这个方法法默认使用用当前类不不带包名的的类名作为为文件的名名称。访问SharedPreferences中的数据访问SharedPreferences中的数据代代码如下::SharedPreferencessharedPreferences=getSharedPreferences("itcast",Context.MODE_PRIVATE);//getString()第二个参数数为缺省值值,如果preference中不存在该该key,将返回缺缺省值Stringname=sharedPreferences.getString("name","");intage=sharedPreferences.getInt("age",1);如果访问其其他应用中中的Preference,前提条件件是:该preference创建时指定定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限。如::有个<packagename>为的应用使用用下面语句句创建了preference。getSharedPreferences("itcast",Context.MODE_WORLD_READABLE);其他应用要要访问上面面应用的preference,首先需要创创建上面应应用的Context,然后通过过Context访问preference,访问preference时会在应用用所在包下下的shared_prefs目录找到preference:ContextotherAppsContext=createPackageContext("cn.itcast.action",Context.CONTEXT_IGNORE_SECURITY);SharedPreferencessharedPreferences=otherAppsContext.getSharedPreferences("itcast",Context.MODE_WORLD_READABLE);Stringname=sharedPreferences.getString("name","");intage=sharedPreferences.getInt("age",0);如果不通过过创建Context访问其他应应用的preference,也可以以以读取xml文件方式直直接访问其其他应用preference对应的xml文件,如::FilexmlFile=newFile(““/data/data/<packagename>/shared_prefs/itcast.xml”);//<packagename>应替换成应应用的包名名使用嵌入式式关系型SQLite数据库存储储数据除了可以使使用文件或或SharedPreferences存储数据,,还可以选选择使用SQLite数据库存储储数据。在Android平台上,集集成了一个个嵌入式关关系型数据据库—SQLite,SQLite3支持NULL、INTEGER、REAL(浮点数字字)、TEXT(字符串文本本)和BLOB(二进制对象象)数据类型,,虽然它支支持的类型型只有五种种,但实际际上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等数据类型型,只不过过在运算或或保存时会会转成对应应的五种数数据类型。。SQLite最大的特点点是你可以以把各种类类型的数据据保存到任任何字段中中,而不用用关心字段段声明的数数据类型是是什么。例例如:可以以在Integer类型的字段段中存放字字符串,或或者在布尔尔型字段中中存放浮点点数,或者者在字符型型字段中存存放日期型型值。但但有一种情情况例外::定义为INTEGERPRIMARYKEY的字段只能能存储64位整数,当当向这种种字段保存存除整数以以外的数据据时,将会会产生错误误。另外外,SQLite在解析CREATETABLE语句时,会会忽略CREATETABLE语句中跟在在字段名后后面的数据据类型信息息,如下面面语句会忽忽略name字段的类型型信息:CREATETABLEperson(personidintegerprimarykeyautoincrement,namevarchar(20))SQLite可以解析大大部分标准准SQL语句,如::查询语句::select*from表名where条件子句groupby分组字句having...orderby排序子句如:select*frompersonselect*frompersonorderbyiddescselectnamefrompersongroupbynamehavingcount()>1分页SQL与mysql类似,下面面SQL语句获取5条记录,跳跳过前面*3条记录select*fromAccountlimit5offset3或者select*fromAccountlimit3,5插入语句::insertinto表名(字段列表)values(值列表)。如:insertintoperson(name,age)values(‘传智’,3)更新语句::update表名set字段名=值where条件子句。。如:updatepersonsetname=‘传智‘whereid=10删除语句::deletefrom表名where条件子句。。如:deletefrompersonwhereid=10使用SQLiteOpenHelper对数据库进进行版本管管理我们在编写写数据库应应用软件时时,需要考考虑这样的的问题:因因为我们开开发的软件件可能会安安装在很多多用户的手手机上,如如

温馨提示

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

评论

0/150

提交评论