【Android源码 栏目提醒】:网学会员为需要Android源码 的朋友们搜集整理了Google_Android_SDK开发范例大全 - 网络与通信相关资料,希望对各位网友有所帮助!
GoogleAndroidSDK开发范例大全第二章
Android初体验
Android操作系统顶着Google与OpenHandsetAlliance的光环让很多程序员在
Android手机还没上市之前就开始紧追着官方文档、EarlySDK版本更新这是IT业界罕见的现象因为大家都抱持着“不想输在起跑点上”的心态。
这也是手机发展的历史中第一次有机会让所有的程序员站在同一个起跑点开始无论是JavaWorld论坛、或是Google官方的DeveloperDiscussionGroup都见到相当热烈的讨论。
从这一章开始将对
Android的程序架构、程序进入点、编译以及执行进行一系列的导航而本书规划之初并非针对Java初学者或从未接触过程序设计的朋友所设计故在这一章简要的overview当中则以快速掌握开发条件、开发环境为目的若你是第一次接触Java程序语言或从未写过面向对象程序设计建议你先学习Java语言打好基础后再回过头来进入本章。
接下来的内容分成五个部分安装AndroidSDK、创建
Android手机开发项目Project、了解
Android程序的生命周期初探可视化的开发工具最后将应用程序部署到模拟器和
Android手机上为避免过于概念性的论述及篇幅的浪费所有操作练习皆以步骤的方法描述只要跟着操作即可上手在体验完本章的内容之后你就可以开始本书范例的学习之旅了。
在开始之前你需要先准备以下作业环境以及程序必备项目自我检查ˇMicrosoftWindowsXP/MicrosoftWindowsVista操作系统或MacOSX10.4.8或更新的版本硬件必须是x86的版本或LinuxAndroidSDK1.0r2以上本书所有范例皆以AndroidSDK1.1r1为开发环境JavaDevelopmentKitJDKv6.0以上Eclipse开发IDE程序本书所有范例皆以eclipse-jee-ganymede-SR1-win32版本为编译环境准备就绪之后就可以前往
Android官方网站http://developer.
android.com/下载AndroidSDK也可以到http://androidappdocs.appspot.com去下载。
▲图2-1到
Android官方网站下载SDK下载后的AndroidSDK为压缩文件请将它解压缩到磁盘中例如下面的文件夹D:SDKandroid而Eclipse编译IDE环境中需安装ADTAndroidDevelopmentToolsplug-in此为
Android的开发工具启动Eclipse后请运行“Help—SoftwareUpdatesgtgtFindandInstall”并按下“AddSite”输入ADTplug-in网址后如下按下“Install”便开始自动下载安装https://dl-ssl.google.com/
android/eclipse/▲图2-2安装ADTPlug-in下载后安装向导会显示两项必须安装的程序AndroidDevelopmentTools与AndroidEditors。
▲图2-3选择安装
Android开发工具及编辑器虽然AndroidADT可以免费下载安装但在使用上仍然有其局限性跟一般应用程序许可条款的签署类似。
▲图2-4同意使用
Android软件开发条款安装ADT所需的时间不长也可以在后台运行不会影响现有的操作系统程序。
安装完毕后需要重新启动Eclipse才能使用AndroidADT。
▲图2-5可以在后台运行安装ADT并需要重新启动Eclipse至此AndroidSDK及ADT已安装完毕所有准备工作都已经就绪随时可以开始建立
Android项目。
这一节将建立本书第一个
Android项目不过在初次建立
Android项目之前需要设置AndroidSDK的路径让Eclipse可以找到AndroidSDK先执行“Window—Preferences”。
▲图2-6运行Eclipse的Preferences设置功能点击“
Android”的树状列表单击“Browse”按钮选择刚才解压的AndroidSDK的路径而后按下“Apply”设置让Eclipse引用的SDK文件夹。
▲图2-7设置AndroidPreferences路径AndroidSDK的引用路径设置完成之后就可以开始建立HelloWorld这个经典范例了运行“File—NewgtgtProject”建立新项目。
▲图2-8建立新的项目新建项目向导需要指定一种应用程序类型故展开“
Android”后点击“AndroidProject”按下“Next”按钮继续。
▲图2-9选择建立项目类型为AndroidProject新建
Android项目需输入项目名称Projectname、Packagename、Activityname以及Applicationname最后按下“Finish”按钮项目随即建立完成。
▲图2-10输入项目名称及Packagename建立新项目到目前为止新建
Android项目已经完成而且这个新建立的程序也已经可以运行运行的方法是在“PackageExplorer”窗口里点开刚建立好的“HelloWorld”项目文件夹并在项目名称上单击鼠标右键在功能菜单上运行“RunAsAndroidApplication”功能。
▲图2-11运行“RunAs—AndroidApplication”功能假若此时尚未将手机与计算机联机那么Eclpise将打开默认的
Android模拟器Emulator运行画面就如同真的手机开机一样随着计算机硬件环境的不同运行模拟器也会有不同的性能表现开机之后随即打开刚建立好的HelloWorld程序。
▲图2-12没写一行程序的HelloWorld要退出被启动的“HelloWorld”程序可以按下手机模拟器上的退格键Backspace。
▲图2-13按下退格键离开程序回到手机的桌面虽然半行代码都没有写但向导却帮忙写好了程序进入点、布局配置、字符串常数、应用程序访问权限等除了可作为程序模板之外也是
Android手机程序的最佳学习范例。
让我们回过头来看看刚才
Android项目建立向导帮忙做了哪些工作以此来了解
Android应用程序的生命周期及其文件组成方式首先展开“PackageExplorer”窗口里的“HelloWorld”项目名称可以看见如下数据结构的文件HelloWorld-src-helloworld.irdc.eracom.com.cn-HelloWorld.java-R.java-AndroidLibrary-
android.jar-D:SDKandroid-assets-res-drawable-icon.png-layout-main.xml-values-strings.xml-AndroidManifest.xml在展开的文件夹层中“src”、“AndroidLibrary”、“assets”、“res”与“AndroidManifest.xml”同属一层放置在“src”里的为主程序、程序类class放置在“res”里的为资源文件ResourceFiles如程序ICON图标、布局文件layout与常数values。
以此HelloWorld程序为例主程序为“HelloWorld.java”其内容与一般Java程序格式相类似packagehelloworld.irdc.eracom.com.cnimportandroid.app.Activityimportandroid.os.BundlepublicclassHelloWorldextendsActivity/Calledwhentheactivityisfirstcreated./OverridepublicvoidonCreateBundlesavedInstanceStatesuper.onCreatesavedInstanceStatesetContentViewR.layout.main主程序里可看见HelloWorld类继承自Activity类在类中重写了onCreate方法在方法内以setContentView来设置这个Acvitity要显示的布局R.layout.main使用布局配置“layoutmain.xml”布局文件是以XML格式编写的内容如下ltxmlversionquot1.0quotencodingquotutf-8quotgtltLinearLayoutxmlns:androidquothttp://schemas.
android.com/apk/res/androidquotandroid:orientationquotverticalquotandroid:layout_widthquotfill_parentquotandroid:layout_heightquotfill_parentquotgtltTextViewandroid:layout_widthquotfill_parentquotandroid:layout_heightquotwrap_contentquotandroid:textquotstring/helloquot/gtlt/LinearLayoutgt布局配置中设置了一个TextViewTAG用以配置文本标签Widget其内部设置的
android:text属性则是要显示的文字内容引用“string”里的hello字符串常数。
查看“values/strings.xml”字符串常数设置如下ltxmlversionquot1.0quotencodingquotutf-8quotgtltresourcesgtltstringnamequothelloquotgtHelloWorldHelloWorldlt/stringgtltstringnamequotapp_namequotgtHelloWorldlt/stringgtlt/resourcesgt其中“hello”字符串变量的内容为“HelloWorldHelloWorld”这即是刚才看见的HelloWorld程序显示的文字内容了。
Android应用程序有以下三种类型l前端ActivityForegroundActivities。
l后台服务BackgroundServices。
l间隔执行ActivityIntermittentActivities。
前端Activity就如同这个HelloWorld一样运行在手机前端程序中后台服务可能是看不见的系统服务SystemService、系统Broadcast广播信息与Receiver广播信息接收器间隔执行Activity则类似如进程Threading、NotificationManager等等。
每一个项目都有一个“AndroidManifest.xml”设置文件里头包含这个
Android应用程序具有哪些Activity、Service或者Receiver先来看看HelloWorld制作好的“AndroidManifest.xml”设置文件的内容描述ltxmlversionquot1.0quotencodingquotutf-8quotgtltmanifestxmlns:androidquothttp://schemas.
android.com/apk/res/androidquotpackagequothelloworld.irdc.eracom.com.twquotandroid:versionCodequot1quotandroid:versionNamequot1.0.0quotgtltapplicationandroid:iconquotdrawable/iconquotandroid:labelquotstring/app_namequotgtltactivityandroid:namequot.HelloWorldquotandroid:labelquotstring/app_namequotgtltintent-filtergtltactionandroid:namequotandroid.intent.action.MAINquot/gtltcategoryandroid:namequotandroid.intent.category.LAUNCHERquot/gtlt/intent-filtergtlt/activitygtlt/applicationgtlt/manifestgt在manifest文件中有一个名为HelloWorld的Activity设置其intent-filter的categoryandroid:name为quotandroid.intent.category.LAUNCHERquot写在intent-filter里是指定此Activity为默认运行的主要Activity除了在manifest文件中手动设置之外也可在Eclipse右击项目名称运行“RunAs—RunConfigurations”设置LaunchAction▲图2-14设置项目要执行的Action方式或ActivityActivity类的应用程序有其默认运行的方式为了确保应用程序运行的优先级理解Activity在手机运行时的生命周期及其可视性Visible周期。
▲图2-15Activity自onStop之后程序即可被关闭以HelloWorld程序里继承自Activitry类开始一旦程序被执行即会照以上流程顺序进行若需要在Activity程序里编写程序默认常见的进入点为重写onCreateActivity或onStartService重写的方式可通过Eclipse来选择方法为将鼠标光标停在继承自Activity的空白处单击鼠标右键展开菜单点开执行“Source—Override/ImplementMethods”功能。
▲图2-16执行“Source—Override/ImplementMethods”功能在重写于实现方法的对话框中点开“Activity”树状列表在其中找到了onCreateBundle方法勾选前方的选择项CheckBox再按下“OK”按钮即可。
▲图2-17选择要重写的方法向导会自动在主程序中描述重写内容最后比较值得一提的是onResume与onPause这两个方法为Activity在onCreate之后运行过程中的生命周期当程序失去前端焦点、或者被关闭就会触发Activity的onPause状态当应用程序被再次唤醒则会回到onResume状态故在编写与User互动的程序过程中需注意User暂时离开Activity或前往不同的Activity、不同的Service前需要处理的工作都会摆在onPause当中执行。
以一个通过网络FTP下载mp3的Activity为例暂停下载工作可以写在onPause里需要接续前一次的下载等处理则由onResume负责。
Android手机有着华丽的机身、流畅的执行速度唯一欠缺的就是“具有视觉美感的UI设计员”但自AndroidSDKrc20a一路发展到1.0_r2OpenHandsetAlliance提供的ADTAndroidDevelopmentTools终于有了预览界面的功能只要点开项目的“res—layout”双击main.xml运行“AndroidLayoutEditor”或在其上单击鼠标右键展开菜单单执行“OpenWith—AndroidLayoutEditor”。
▲图2-18单击XML布局配置文件选择以AndroidLayoutEditor编辑AndroidEditor的功能虽然阳春但至少还算齐备具有文字模式与UI配置模式可供切换如下图的“Layout”与“main.xml”页签切换所示。
▲图2-19AndroidLayoutEditor具有文字模式与UI配置模式可供切换编辑目前的ADT版本虽然提供了预览接口功能但没有提供类似MicrosoftVisualStudio的拖拉界面组件开发工具所以布局的配置虽然直观但还是不够自然所幸在Google还未完整推出GUI的拖拉工具之前已有网友以Java写出了好用的可视化GUI布局拖拉工具程序DroidDraw。
DroidDraw目前是一个公开的GoogleCode除了可以在线免费下载http://code.google.com/p/droiddraw/使用到计算机端执行之外也提供在线直接使用的版本http://www.droiddraw.org/DroidDraw同时还提供了源代码SourceCode可供程序员自行参考或修改。
▲图2-20DroidDraw提供了可视化拖拉组件的方式设计布局期待未来Google能将拖拉布局的功能纳入AndroidEditor当中如此一来更能整合AndroidSDK以及开发环境的功能且让我们拭目以待吧要部署程序在模拟器上运行在先前HelloWorld的程序已经看过了在项目名称上单击右键执行
Android应用程序即可但事实上要将
Android程序部署在手机环境中进行测试方法也是相同的同样调用“RunAs—AndroidApplication”的方式执行不同的是需要事先安装好
Android的USBDriver并且通过USB联机至手机在与手机联机的状况下就可以让Eclipse在运行
Android程序时直接将程序部署于实机环境中执行。
AndroidUSB驱动程序是随着AndroidSDK所提供的每一个版本的SDK都可能有不同版本的USBDriverVersion其存放在以下AndroidSDK解开后的参考位置如D:SDKandroidusb_driver安装的步骤是先将手机以USB与计算机连接操作系统会找到名为AndroidPhone的设备但是却在装置管理员当中无法正确被识别如下所示。
▲图2-21操作系统找到名为AndroidPhone的装置但无法正确被识别接着画面会跳出添加硬件向导选择“从列表或指定位置安装高级”来自行挑选驱动程序位置。
▲图2-22选择“从列表或指定位置安装”自己安装驱动程序在“搜索和安装选项”的画面中选择“不要搜索我要自己选择要安装的驱动程序”选项选择“显示所有设备”后按下“下一步”。
▲图2-23选择不要搜索系统数据改以自行挑选硬件的方式利用浏览按钮选择复制源为AndroidUSBDriver程序路径▲图2-24选择AndroidSDK里所附的USBDriver选择驱动程序后于显示兼容硬件列表中选择“HTCDreamCompositeADBInterface”程序将
Android手机的USBADBInterface安装完成。
▲图2-25安装AndroidUSBADBInterface完成设备管理器会自动新增一项ADBInterface的项目表示已经顺利安装了
Android手机与计算机的联机。
▲图2-26顺利安装了
Android手机与计算机的联机安装完ADBInterface之后暂时还无法通过Eclipse将
Android项目程序部署至手机上必须先将手机上的USB调试Debug模式打开在手机上执行“应用程序设置—开发gtgtUSB调试”。
▲图2-27将手机的USB调式模式打开在Eclipse执行项目时若程序发现先前已打开的模拟器与手机同时并存那么将会跳出DeviceChooser的窗口让开发者选择要部署的设备下图为选择AndroidG1手机之后于Console里显示正确执行的Log纪录。
▲图2-28上图中的警告为开发使用的是SDK1.1但手机是SDK1.0的警告部署程序到手机上测试是最适合的方法因为许多功能皆需要手机才能进行测试如WiFi驱动程序、平衡感应器、电池剩余计量等等。
看完了本章介绍的内容相信各位已快速掌握了AndroidSDK的安装方法、Eclipse开发环境的设置、使用可视化布局开发工具以及试写了一个AndroidHelloWorld的应用程序咳虽然一行程序都没写最后将程序部署于实机上运行这是每一位
Android程序员都必须快速掌握的重点也是进入本书范例必须要具备的基本操作能力。
接下来将是丰富精彩的范例系列相信通过边学边操作你将获得更多宝贵的实战经验祝大家学习愉快第三章用户人机界面范例说明前一章写了HelloWorld之后一直觉得没有写半行代码对不起自己所以在本章人机界面一开始则延续HelloWolrd的气势进行与TextView文字标签的第一次接触。
在此范例中将会在Layout中创建TextView对象并学会定义res/values/strings.xml里的字符串常数最后通过TextView的setText方法在预加载程序之初更改TextView文字。
运行结果▲图3-1认识TextView.setText更改默认Layout里定义的文本字符串范例程序src/irdc.ex03_01/EX03_01.javasrc/irdc.ex03_01/EX03_01.javasrc/irdc.ex03_01/EX03_01.javasrc/irdc.ex03_01/EX03_01.java主程序示范以setText方法输出String类型的字符串变量。
packageirdc.ex03_01importandroid.app.Activityimportandroid.os.Bundle/必须引用widget.TextView才能在程序里声明TextView对象/importandroid.widget.TextViewpublicclassEX03_01extendsActivity/必须引用widget.TextView才能在程序里声明TextView对象/privateTextViewmTextView01/Calledwhentheactivityisfirstcreated./OverridepublicvoidonCreateBundlesavedInstanceStatesuper.onCreatesavedInstanceState/载入main.xmlLayout此时myTextView01:text为str_1/setContentViewR.layout.main/使用findViewBtId函数利用ID找到该TextView对象/mTextView01TextViewfindViewByIdR.id.myTextView01Stringstr_2quot欢迎来到
Android的TextView世界...quotmTextView01.setTextstr_2res/layout/main.xmlres/layout/main.xmlres/layout/main.xmlres/layout/main.xml以
android:id命名TextView的ID为mTextView01在较旧的版本写法与1.0的不同请特别留意。
ltxmlversionquot1.0quotencodingquotutf-8quotgtltAbsoluteLayoutandroid:idquotid/widget35quotandroid:layout_widthquotfill_parentquotandroid:layout_heightquotfill_parentquotxmlns:androidquothttp://schemas.
android.com/apk/res/androidquotgtltTextViewandroid:idquotid/myTextView01quotandroid:layout_widthquotwrap_contentquotandroid:layout_heightquotwrap_contentquotandroid:textquotstring/str_1quotandroid:layout_xquot61pxquotandroid:layout_yquot69pxquotgtlt/TextViewgtlt/AbsoluteLayoutgt扩展学习TextView里的setText方法支持以下多态构造方法publicfinalvoidsetTextCharSequencetextpublicfinalvoidsetTextintresidpublicvoidsetTextCharSequencetextTextView.BufferTypetypepublicfinalvoidsetTextintresidTextView.BufferTypetypepublicfinalvoidsetTextchartextintstartintlen在此以最后setTextchartextintstartintlen为例第一个参数为char数组作为输出依据第二个参数为从哪一个元素索引开始选取第三个参数则为要取出多少个元素请看以下的例子charchar_1newchar5char_10Dchar_11achar_12vchar_13ichar_14dmTextView01.setTextchar_113如上述程序所示输出的结果是“avi”因为从第1个元素索引开始共取3个元素最后则要提醒你TextView.setTextView不支持HTMLTAG的输出所以即便写成这样mTextView01.setTextquotltahrefquothttp://shop.teac.idv.tw/MyBlog/quotgt戴维的博客lt/agtquot实际输出时也就是纯文本而已并不会作HTMLTAG的转换。
但若撇开HTMLTAG之外如“lt”开头的标记在TextView里加上了
android:autoLinkquotallquot那么正文中若有网址http://是可以被显示的以下这个范例就交给你自己实现看看。
ltTextViewxmlns:androidquothttp://schemas.
android.com/apk/res/androidquotandroid:layout_widthquotfill_parentquotandroid:layout_heightquotwrap_contentquotandroid:autoLinkquotallquotandroid:textquot请访问戴维的博客http://shop.teac.idv.tw/MyBlog/quot/gt范例说明在之前的范例运行结果窗口的底色一律是“深黑色”这是SDK默认的颜色要更改Activity里的窗口底色有许多方法最简单的方法就是将颜色色码事先定义在drawable当中当程序onCreate创建的同时加载预先定义的画面颜色。
此范例程序的设计方式是在drawable里指定Layout的背景色BackGround为白色但这里的“白色”颜色色码为FFFFFFFF预先定义在drawable当中当程序运行时背景就会变为白色。
这是指定ActivityLayout背景颜色最简单的方法在范例最末则将示范如何创建色彩板colortable让
Android手机程序可以像使用“常数”般直接取用并反应在应用程序的运行阶段。
运行结果▲图3-2使用drawable设置颜色常数应用于程序运行时的结果范例程序src/irdc.ex03_02/EX03_02.javasrc/irdc.ex03_02/EX03_02.javasrc/irdc.ex03_02/EX03_02.javasrc/irdc.ex03_02/EX03_02.java程序继承自Activity类并在重写onCreate创建之初直接显示R.layout.mainmain.xml这个页面安排的布局配置。
packageirdc.ex03_02importandroid.app.Activityimportandroid.os.BundlepublicclassEX03_02exte.