android开发实验指导书系统应用单元_第1页
android开发实验指导书系统应用单元_第2页
android开发实验指导书系统应用单元_第3页
android开发实验指导书系统应用单元_第4页
android开发实验指导书系统应用单元_第5页
已阅读5页,还剩115页未读 继续免费阅读

下载本文档

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

文档简介

第一章Exynos4412软硬件简 1.2板资源介 Nandflash地址分 第三章Android概 什么是 组 第四章Android开发环 oAndroid的开发步骤 3G/GPRS应 Music测 测试 7.2实验例 Exynos4412·ARMCortex-·主频·NEON·支持MPEG-4/MPEG2、H.264/H263、VC-1、DivX的编·2D8000×8000SGX540,OpenGL-·支持SD/MMC/SDIO接口卡,最高支持·支持JPEG硬件编,最大支持8192×8192分辨1.2板资源介·内存:8Gbits·Flash:32GbitsSLCNAND··100M·AC97HIFI···JTAG·1CAMERA·RS232×4、RS485·外扩I2C、SPI 、AD/DA等接·支持8×8矩阵键盘接口,板载5个Android键·4USBHOST2.0,1USBOTG2.0·2SDIO(1SD,1SDIOwifi·板载TV-OUT、、VGA接口输·3.510.1·阻式触摸屏与电容式触摸·CAN·485·板载模拟CCD头接·GPS·WIFI·Zigbee·miniPCIWCDMA/CDMA2000/TD-CDMA3G·板载工业级GSM/GPRS,支持GSM通话//GPRS上网·cramfs/yaffs·100M·USB·NANDFLASH·SD·SD·支持fastboot协议烧写系Linux·内核版本:Linux-·LCD·LCD·VGA··驱·HSMMC/SD/MMC/SDIO·IIC·SPI·KEYBD·AUDIOAC97·DMA·USBHOST/DEVICE·JPEG硬件编驱·MFC多硬件编驱动,支持MPEG-4/MPEG2、H.264/H263、VC-1、DivX等格式·CMOS/CCDCamera·2D·3D··SD·3G·SDIOWIFI·BT···USBADBADB调试,U···WIFI·3G上网(支持全频道·GPRS·GSM·支持输·VGA·支持CMOS/CCDCamera拍照与录·支持硬件编·JPEG·2D/3D·LCD··USB·SD·支持音频与录·APP音乐支持全部主流的音乐,比如支持晰JPEG、GIF、BMP等格式浏览,最大可支持8192×8192分率子书阅读,可以阅读EPUB/PDF/FB2//HTML/TXT等格式的电子ANSI/ASCIIUTF-8,UTF16-BE,UTF16-,,8GBbitsDDR2,4GBbitsSLCNAND支持ECC64-bitSamsung,Toshiba,Hynix,Microm,In4xnm,3xnm,2xnm板载485CAN板载模拟CCD头接板载1CAMERA 、VGA接口输 、AD/DA等接口板载4USBHOST2.0,1USBOTG2.0支持8×8矩阵键盘接口,板载5个Android键盘板载2SDIO接口(1SD卡接口,1SDIOwifi接口板载工业级GSM/GPRS,支持GSM通话//GPRS上网miniPCIWCDMA/CDMA2000/TD-CDMA等多种制式3GOS:Android多种系统启动方式:NANDFLASHSD/MMC卡启动,0x00000x1FFF0x20000x3FFF0x40000x5FFF0x60000x7FFF0x80000x8FFF0x90000x9FFF0xA0000xAFFF0xB0000xBFFF0xD0000xDFFF0xE0000xFFFFNandflash0x00B00x00FF0x01000x07DF0x07E00x091F0x09200x0FFF注意:最后android显示可用空间为三十几兆,并不是userdata的全部110兆AndroidAndroidLinux为基础的开放源码操作系统,主要使用于便携设Android操作系统最初由AndyRubin开发,最初主要支持。2005年由收购注资,并组建开放开发改良,逐渐扩展到平板电脑及其他领域上。AndroidiOSRIMBlackberryOS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年2月数据,Android占据全球智能操作系统市场52.5%的份额,占有率为68.4%。Android采用了软件堆层(softwarestack,又名以软件叠层)的架构,主LinuxCLibraryVirtualMachineC++JavaAndroid的系统架构和其它操作系统一样,采用了分层的架构。从架构图看,Android分为四个层,从到低层分别是应用程序层、应用程序框架层、系统运行库层和linux层。Android是以Linux为的操作平台,作为一款开放式的操作系Android的快速发展,如今已允许开发者使用多种编程语言来开发AndroidJavaAndroid应用程序的单一AndroidJava作为编程语言来开发应用程序,也可NDKC/C++SL4A来使用其他语言进行编程(如:python、lua、tcl、php等等,还有其他诸androidAndroidMonoDroidC#作为编程语言2009AndroidSimpleBasic语言。而在网页编程语言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发。Android系统底层方面,AndroidC/C++

表3.2.1AndroidApplicationframework:可重用的和可替换的组件部分,在这个层面上,所有的软件都是的。Dalvikvirtulmachine:LinuxIntegratedbrowser:WebKitOptimizedgraphics:2DOpenGLES1.03D实现。:Mediasupport:通用的音频,和对各种格式的支(MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GSMephony:GSM移动网络,硬件支持Bluetooth,EDGE3GandWiFi:Camera,GPScompassandaccelerometer:Richdevelopmentenvironment:包含一套完整的开发工具集,方便Eclipse的插件。Android四大组件,分别是:活动(Activity):用于表现功能。服务(Service):相当于运行的ActivityProvider:Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,ActivityAndroid当中最基本的模块之一。在Android的程序当中,Activity一般代表屏幕的一屏。如果把比作一个浏览器,那么Acitivity就相当于一个网页。在Activity当Button、CheckboxActivity概念和网页的AndroidActivityActivity之间可Button按钮后,可能会跳转到其他的Activity。和网页跳转稍微有些不一样的是,Activity之间的跳转有可能返回ActivityAActivityBActivityB运行结束的时ActivityA一个返回值。这样做在很多时候是相当方便的。Android会把每个应用的开始到当前的每一个屏幕保存在堆栈中。Activity是由Android系统进行的,它也有自己onRestoreInstanceState(intentServiceAndroidActivity的级别差不多,但是他不能自己运行,只能运行,并且可以和其他组件进行交互。Service是没有界面的长生命周期的代码。Service是一种程序,它可以运行很长时间,但Android浏览器,这个时候台继续一首接着一首的。其实这个就是由音乐的Service进行控制。当然这个音乐的Service也可以停止,例如,当列表里边的歌曲都结束,或者用户按下了停止音乐的快捷键等。service可以在和多场合的应用中使用,比如多的时候用户启动了其他Activity这个时候程序要在继续,比如检测SD卡上文件的变化,再或者在记录你地理信息service有两种方式Context.startService():ServiceonCreate->onStart(Service还androidonCreate()onStart()Service已经运onStart()ServiceonStart方法可能会重复调用多;stopService用stopService的话,Service会一直在运行。该Service的调用者再启动起stopServiceServiceContext.startservice()Context.stopService()stopSelf(),他都会被停止。补充startService()IntentonStart()方法。调用顺序为:onCreate-->onStart(可多次调用)-->onDestroy。(2)Context.bindService():ServiceonCreate()onBind(),onBind将IBind接口实例,IBind允许客户端回调服务的方法,比如得Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroyed相应退出,所谓绑定在一起就共存亡了。在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。可以使用BroadcastReceiver来让应用对一个外部的做出响应。这 BroadcastReceiver进行处理。例如,当一个程序成功完成的时候,仍然可以利用BroadcastReceiver进行处理。BroadcastReceiverUI,也就是说对于用户来说不是透明的,用户是看不到的。BroadcastReceiverNotificationManager来通知用户BroadcastReceiver既可以在AndroidManifest.xml中,也可以在运行时的代码中使用Context.registerReceiver()进行。只要是了,当来临Context.sendBroadcast()intentbroadcasts广播给其他应BroadcastReceiver有两种方式:AndroidManifest.xml进行<actionBroadcastReceiver依然会接受广来的对象,也就是说无论你这个应用程序在代码中广 BroadcastReceiverbcr=newpublicvoidonReceive(Contextcontext,Intentintent){Log.d("test","^-^,HavereceivedMassage!");}IntentFilterfilter=newIntentFilter();this.registerReceiver(bcr,filter);第一种俗称静态,第二种俗称动态,这两BroadcastReceiver动态较静态灵活。实验证明:当静态一个ContentContentProviderAndroid提供的第三方应用数据的方案。在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件、等等内容,都是不允许其他Android当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备ContentProvider。应用想对外提供的数据,可以通过派生ContentProviderContentProviderContentProvider都用uri作为独立的标识,形如:.xxxxxREST的样子,但实际上,它比RESTREST类似,uriid的,另一iduri你也可以返回REST。另外,ContentProviderRESTuri可用,还可以接受Projection,Selection,OrderBy等参数,这样,就可以像数据库那样进行投影,Cursor(参见:reference/android/database/Cursor.html)的形式进行返回,调用者可以移动Cursor来各列的数据。ContentProvider了内部数据的细节,向外提供了上述统一的接口更方便的途径。ContentProvider内部,常用数据库来实现,Android提供了强大的支持,但很多时候,你也可以封装文件或其他混合的数据。Android中,ContentResolverContentProvider的定位和的。不过它仅提供了同步的ContentProvider的接口。但通常,ContentProvider需要的可能是数据库等大数据源,效率上不足够快,会导致调用AndroidAsyncQueryHandler(参见:refrenc/android/contet/yHandle.hml,在各大组件中,Service和ContentProvider都是那种需要持续的。Service如果是一个耗时的场景,往往会提供异步的接口,而ContentProvider不论效率如何,都提供的是约定的同步接口。这遵循的就是场景导向设计的原则,因为ContentProvider仅是提供数据的,它不能确信具体的使用场景如何,会怎样使用它的数据;而相比之下,Service包含的逻辑Android是于2007年11月5日宣布的基于Linux平台的开源LinuxJAVA的壳。Android的平台基本上是免费的,虽然有部份原生库会要求费用,但大部份是免权利金。AndroidJAVA开发,因为它的虚拟机(VirtualMachine)DalvikJAVAbytecode转成自己的格式,回避掉需要付给SUN有关JAVA的费用。因此,Android开发环境是需要JDKa.java: /javase/downloads/index.jsp4.1.1图 界选择DownloadJDK只JDK,无需jre。b.Eclipse:4.1.2所示。图4.1.2界EclipseIDEforJavaEEDevelopers(注:根据应用的电脑位数选c.AndroidAndroidSDK两种版本,一种是包含具体版本的SDK的,一种是只有SDK20M70多M完全版本:https:/ 升级版本 推荐使用升级版本,在Eclipse中需要的版本。且一般Eclipse包中含环境安装文件在光盘\Android开发指导书\Android开发环 ......12(JDK时,没有改变安装路径,则现在一般不需要配置上述环境变量.......264.2.274.2.28eclipsesdkwindow->preferences->Android,出来以下4.2.294.2.304.2.314.2.324.2.33SDKSD卡。Window->AndroidSDKandAVDManager.4.2.34配置模拟器4.2.35配置模拟器4.2.36配置模拟器4.2.37配置模拟器4.2.38模拟器界面4.2.39模拟器界面5.1.1android javagen/ 中存放所有由Android开发工具自动生成的文件。 就是R.java文件。这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res 的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的以减少应用在占用的空间。res/资源 中我们可以存放应用使用到的各种资源,如xml界面文件,图AndroidManifest.xml功能文 服务、互联网服务、服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Aperties项目环境信息Android的资源:Andriod中的资源是指非代码部分;如程序中使用的,音频文件,动画,字符串等RESdrawable、layout、values、raw等文件目 只有一个drawable,而2.2版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。drawable-hdpi、drawable-mdpi、drawable-ldpi的区别:(1)drawable-hdpi里面存放高分辨率的,如:WVGA(480x800),(2)drawable-mdpi里面存放中等分辨率的,如HVGA(320x480)(3)drawable-ldpi里面存放低分辨率的,如QVGA(240x320)AndroidManifest.xml是每一个应用都需要的文件,位于应用根 描述了程序包的全局变量,包括的应用组件(activities,services等等)和为每有tform(system)、shared、media以及应用自定义的认证。不同的认证可以享权限(permission):权限用来描述是否拥有做某件事的权力。Android系统(signature)和系统/签名级别(signatureorsystem)。限,我们称之为高级权限或系统权限,应用拥有tform级别的认证才能申API,应用可以在运行时动态添加。PackageManager.addPermission()需要遵循权限授予条件,非tform认证的应用无法申请高级权限。SDK(uses-sdk):SDK版本。高兼容性的应用可以application:application是Android应用内别(toplevel)的模块,每application,如果应用没有指定该模块,一个默认的application将被启用。application将在应用启动时最先被加载,并存活在应用的整个运行时生命周期。因此一些初始化的工作适合在本模块完成Application元persistentenable<application <activityandroid:name=". <actionandroid:name="ent.action.MAIN"AndroidManifest.xmlactivity:activity是application模块的运行时素,标识了一个UI。除了application,一个应用可以并实现零至多个其它运行时模块,activity也同样。activityname”是必须activity(即本描述文件的最开始处,那么名字前面需要加入所在包名。activity通过intent-fliterintentintentactivity的receiver:receiver也是application的运行时素。receiver通过增加intent-fliterintentintent后,receiver将根据不同的intent进行不同的处理。当一个Intent发出后,所有了该intent的receiver都将会收到,系统会根据receiver在系统中的次序顺序发送。当一receiverIntentreceiver发送。当一个receiverintentintent发送的次序顺序接收。service:service也是application的运行时素。Service属于模service或所在应用进程被杀死。provider:provider也是application的运行时素。它继承于作方式的封装。如果应用允许外部应用/管理它的用户数据,provider是Android平台提供的最佳方式。activity-alias:activityAndroidManifest.xml<manifest>文件根节点,<uses-permission>请求一个安全,必须被授予该权限,您的程序包才能正确的操作。0~N<permission>一个安全,用来限制哪些应用可以您的程序包内的组件和特有机制。0~N<application>描述程序包内应用级别组件的根节点。该节点能够描述应用程序的全局(和/或)默认属性,例如,图标,,需要的,等等.包含零<activityActivity是应用于用户交互的最主要机制。当一个应用运行的时候,activity,并且,用户所使用的其他绝大多数屏幕<receiver>IntentReceiver可以让应用接收到一次数据变化和一次行为发生,甚至这个应用没有在运行也可以。同activity一样,你可以<service>Service是一个在任意时刻都可以运行的组件。同activity标签一样,你可以选择包含一个或多个<intent-filter>元素<provider>ContentProvider组件是用来管理数据持久化及数据发布的,发布AndroidManifest.xmlAndroidManifest.xml是每一个应用都需要的文件。位于应用根下,描述了程序包的一个全局变量,包括的应用组件(activities,services等等)和为每个组件的实现类,什么样的数据可以操作,以及在什么地方运行。这个文件的一个重要方面(概念)intent过滤器。这个过滤器描述activityactivity(或是操作系统)想要执行一个动作,Web页或是打开一个联系人选取屏幕,Intent对象。该对象包含了很多的描述信息,描述了你想做什么操作,你想处理什么数据,数据的类型,以及一些其他的重要信息。AndroidIntent的信息与所有应用的intent过滤器比较,找到一个最能恰当处理请求者要求的数据和action的ents的信息在Intent页。另外还要您的应用的Activities,ContentProviders,Services,和IntentReceivers,AndroidManifest.xml文件中指定权限和xmlns:android属性是XML名空间语句,用来告诉Android工具将AndroidAndroidmanifestactivityapplication时,该如何判断哪个activity是activity。经过测试发现,在manifest中定义的activityactivityactionMAINcategory是LAUNCHER属性,那么该activity就是程序。如果manifest中有多个这样activityactivity作为入口程序。manifestactivity存在。AndroidManifest.xml<?xmlversion="1.0"encoding="utf- <application<activityclass=".<intent- 5.3oAndroid的开发步骤EclipseEclipse3.3首先,看一下要创建"o,World"程序从高级层面上有哪些步骤:1,通过 File->New->Project菜单,建立新项目"AndroidProject"2,3,启动Eclipse,选 File->New->Project菜单,如果你安装好了的Eclipse插件,你将会在弹出的框中看到"AndroidProject"的选项,如.1Android选择“AndroidProject”,点 Next按钮图5.3.2的框需要你输入与项目有关的参数5.3.2这个表格中详细介绍了每个参数的含义ProjectName:PackageName:JAVA规范,用包名来区分不同的类是很重要ActivityName:AndroidActivity类的Activity类是一个简单的启动程序和控制程序的类。它可以根据需Application "Usedefaultlocation"选项,允许你选择一个已存在的项当项目创建后,你刚才创建的oAndroid就会是包含下面的代码publicclassoAndroidextends{/**Calledwhentheactivityisfirstcreated.*/publicvoidonCreate(Bundle{}}publicclassoAndroidextendsActivity/**Calledwhentheactivityisfirstcreated.*/publicvoidonCreate(Bundleicicle){tv.setText("o,Android");}}importandroid.widget.TextView;Android程序中ViewsView可以程序中),这个显示文本的View子类叫做TextView。TexiViewtv=newTextViewAndroid程序的Context实例,Context可以控制系统调用,它提供了诸如资源解析,数据库等等。Activity类继承自Context类,因为我们的oAndroid是Activity的子类,所以它也是一个Context类,所以我们能用"this"TextView构造中。tv.setText("o,Android");TextView显示在TextView。运行代码:o,AndroidEclipseRun->OpenRunDialog。你将会看到下面的框,如图5.3.3所示。图 Android插下一步,高亮"AndroidApplication",然后按下左上角的图标(就是像一片纸带个小星星那个),或者直接双击"AndroidApplication",你将会看到一个新的运行项目,名为"New_configuration"5.3.4所示。5.3.4取一个可以表意的名称,比如"o,Android",然后通过Browser按钮选你的项目(Eclipse),然后插件会自动搜索在你的项目中的Activity类并且将所有找到的添加在"Activity"标签的下拉列表中。我们只有"o,Android"一个项目所以它会作为默认选择点击"Apply"按钮,.5到这里,已经完成了,你只需要点击"Run"Android的模拟5.3.6所示。5.3.6Android提供了一种可替换的界面构建方式:XML的布就是View,一个TextView。你可以使用任何继承自View类的名字作为的名字。包括Web开发。就是XML5.3.1是他们的含义这是XML命名空间的,它是告诉Android的工具,这个属性定义了在屏幕上这个View这个属性定义了在屏幕上这个View5.3.1XMLXML布局文件的样子,但是你需要放在哪里?它要放在你的项目的res/res”是”resources”的缩写,它是存放所有非代码资源的文件夹,包含象,本地化字符串和XML布局文件。Eclipse的插件已经给你创建好了,在我们上面的例子中,我们没有使reslayout.main.xml,替换掉那个R.javapublicfinalclassRpublicstaticfinalclassattrpublicstaticfinalclassdrawablepublicstaticfinalintpublicstaticfinalclasslayoutpublicstaticfinalintpublicstaticfinalclassstringpublicstaticfinalint一个项目的R.java使用一种速记方式来你项目中包含的资源。这个有点特别的强大像对于EclipseIDE的代码编译特性,因为它使你快速的,互动式的定位你正在寻layoutmain,R.java也相应的改变了。最后重要的事情是你需要去修改你的oAndroid源代码,去使用新XML布局你的界面。替换掉编码式的界面模式。下面是你的新代码的样子,你publicclassoAndroidextendsActivity{publicvoidonCreate(Bundleicicle){}}当你做这些改变的时候,不要仅 ,粘贴到你的代码中,尝试去体R.java这个用于EclipseAndroid插件作为Eclipse中的调试器也具有优秀的兼publicclassoAndroidextendsActivity{publicvoidonCreate(Bundleicicle){Objecto=null;}}NullPointerException.7后(Eclipse中显示行数的左部区域),RunDebug选择Eclipse的调试模式视图中,它就会停止在你GPSGPSGPS天线头部伸到露天的地(这样才有信号再启动板子搜索需要几分钟时间请耐心等待打开图6.1.1中所示软件,需要一段时间进行的搜索,稍等片刻,软件中就能显示GPS模块返回的各种数据。状态栏左上角将出现GPS信号图6.1.1GPS6.1.2GPSGPS6.1.3所示,进入设置,选择位置信息权限,勾选使用GPS定位。6.1.3GPS注意:地图定位需要通过网络来地图,因此在使用GPS的同时需要打3GWIFI网络。wifi6.1.43种网络之间的优先级为:WIFI网络=>=>3G/GPRS网wifi和有线网络。3G卡,上电启动板子。在系统启动后,点击设置,选择其中的6.2.1所示。.26.2.3所6.2.33G6.2.4所示。6.2.4送的,输入发送的信息,点击发送即可。图6.2.5界图6.2.6界 图6.2.6为来电、拨打和接听的截图。图6.2.6 界图6.2.7 界可以运行菜单中的浏览器,搜狗音乐和360助手均可测试网络,如.7比如使用游览器打开主页,如图6.2.8所示.96.2.93种网络之间的优先级为:WIFI网络=>3G/GPRS网络,即两者同时打开的情况下,会优先使用前者。WIFI网络的优先级最高,所WIFI网络,无需事先对其他网络做设置。通过菜单中的设置(Settings)WIFI.1WIFIWi-Fi.2WIFI6.3.3图6.3.3WIFI界wifi的标志和信号强度。使用游览器打开主页,如图6.3.4所示:6.3.4usb蓝牙插头。第一次使用蓝牙,需要手Settings.所示。.4所示。.5所.6所示。6.4.6ES6.4.7所示。6.4.7查找需要传输的文件,长按文件弹出功能框,点击功能,弹出通过框,选择蓝牙即可弹出当前连接的蓝牙设备,如图6.4.8所示。..10所示。6.4.10android本身带有的工具,可测试触摸效果。具体操作如下:选择DevTools6.5.1所示。6.5.1PointerLocation.设备内置SD卡。可以通过浏览器查看里面的文件,也可以通过视频器去里面的文件,如图6.6.1所示。6.6.1图6.6.2选择界打开图中的“ES文件游览器进入sdcard ,把apk应用程序放入内置SD卡中,点击需要安装的软件,按照提示操作即可,如图6.6.3所示。.4另外板子预装的“360助手”程序可以网络并安装应用程序系统运行的时候把SD插入到板子的SD接口系统会自动检测插入的U盘, 的/udisk下。6.7.1中的“ES6.7.1进入收藏夹中选择 /usbdisk6.7.2U6.7.4U6.7.5U6.7.6所示。把文件放到SD中,运行程序,在此我们以暴风影音为例式或者一些高码率的,的效果可能不一样,如图6.9.1所示。图6.9.1选择器界图6.9.2界板子已预装一个软件,其实,camera的功能,的同时也。注意:使用的是外部麦克风,时需要插入外部麦克风(1)打开图中的软件,如图6.10.1所示图6.10.1选择界0.2点击开 按钮,开 ,如图6.10.3所示图6.10.3开始界点击结束按钮,完成。点击按钮或双击录制完成的文件,可6.10.4图6.10.4结束界点击右上角的菜单键,会显示文件、和录制的高级属性应用。如单击,显示音量调节、循环和速率选项,如图6.10.5所示。图6.10.5设置属性界Dial..3string.xml<?xmlversion="1.0"encoding="utf- <stringname="app_name">拨号<stringname="lable">输入号码R.javastringmain.xmlmain.xml<?xmlversion="1.0"encoding="utf- android:orientation="vertical">android:text="@string/lable"android:layout_height="wrap_content"/>android:text="@string/app_name"/>EditTextHTMLinputDialActivityonCreate()packageimportandroid.app.Activity;importandroid.content.Intent;import.Uri;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importpublicclassDialActivityextendsActivity{privateEditText;publicvoidonCreate(BundlesavedInstanceState){Buttonbtncall.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv)//TODOAuto-generatedmethod (":"+Text)); }}}Intentintent=newIntent(Intent.ACTION_CALL,Uri.parse(":"+Text)) 在Android操作系统中,当我们把一个,加上“:”前缀传给系统 图,并将传给该意图。参数Intent.ACTION_CALL代表拨号动作名称, 拨号器。参数Uri.parse(":"+Text)),将前加上“:”前缀之后,用Uri的parse方法将这个字符串包装成一个Uri对象作为参数传入,形成一个Uri地址,告诉Android系统调用 由于我们拨打是使用系统中带的拨号器因此要向Android平台申请使用拨号功能的权限。如前面所述,我们需要在功能文件AndroidManifest.xml中申请权限,详细如下:<?xmlversion="1.0"encoding="utf-<manifest android:versionName="1.0"><uses-sdkandroid:minSdkVersion="8"<uses-permissionandroid:name="android.permission.CALL_PHONE"android:label="@string/app_name">android:label="@string/app_name"><actionandroid:name="ent.action.MAIN"其中<uses-permissionandroid:name="android.permission.CALL_PHONE"/>就是向 .3SMS7.2.1所示。.27.2.3string.xml<?xmlversion="1.0"encoding="utf-<stringname="o">oWorld,<stringname="app_name"><stringname="numberlabel">输入号码<stringname="contentlabel">输入内容<stringname="buttonlabel"><stringname="success">发送成功R.javastringmain.xmlmain.xml<?xmlversion="1.0"encoding="utf-<LinearLayoutxmlns:android="http://s android:orientation="vertical"android:layout_width="fill_parent"android:text="@string/numberlabel"/>android:id="@+id/phonenum"/>android:text="@string/contentlabel"/>android:id="@+id/content"<Buttonandroid:layout_width="wrap_content"android:id="@+id/button"/>SMS.javapackagecom.xhch.sms;importjava.util.*;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.Toast;publicclassSMSextendsActivitypublicvoidonCreate(BundlesavedInstanceState){Buttonbutton=(Button)this.findViewById(R.id.button);publicvoidonClick(Viewv)EditTexttextphonenum=(EditText) EditTexttextcontent=(EditText)findViewById(R.id.content);Stringphonenum=textphonenum.getText().toString();//取得号Stringcontent=if((phonenum==null||"".equals(phonenum))||(content==null||"".equals(content))){//Toast}elseSmsManagermanage=//取得默认的SmsManager用于的发List<String>all=}

//的内容是有限的,要根据长度截 tor<String>it=all.i while(it.hasNext()){manage.sendTextMessage(phonenum,nullit.next(),null,null);//}}}}List<String>texts=SmsManger的divideMessage方法的作用是将传入的内容进行拆分。由条的字数不超过最大限制。拆分后的字符串放入List之中。smsManager.sendTextMessage(,null,text,null,Eclipse中可以通过如下方式查看方法的参数、返回值的类型及意义等信息。将鼠标指向需要查看的方法,Eclipse7.2.4的提示。7.2.4destinationAddress:要发送的目标号码text:要发送的内容sentIntent:当将发出后有两种状态用户可能会比较关心,就是需要向系统申请权限,功能文件如下<?xmlversion="1.0"encoding="utf-<manifest android:versionName="1.0"><uses-sdkandroid:minSdkVersion="8"<uses-permissionandroid:name="android.permission.SEND_SMS"android:label="@string/app_name">android:label="@string/app_name"><actionandroid:name="ent.action.MAIN"<uses-permissionandroid:name="android.permission.SEND_SMS"该行代码就是申 权限.6用来音频、、流。包含Audio和的功能12)release:释放Mediayer对象13)reset:重置Mediayer对象17)setDisy:设置用SurfaceHolder来显示多setScreenOnWhileying:设置是否使用SurfaceHolder来显setVolume:5)一般start前需要用isying方法检测6)pause:暂停,可用start恢复7)stop:prepare()start注意:本例程需要在SDcard 下添加test.mp3文件packagecom.xhch;.URI;importandroid.app.Service;importandroid.content.Intent;importandroid.media.Mediayer;import.Uri;importpublicclassMyServiceextendsService{privateMediayermp;publicIBinderonBind(Intentintent)//TODOAuto-generatedmethodstubreturnnull;}publicvoidonCreate()Uriuri=Uri.parse("file:///sdcard/test.mp3");}publicvoidonStart(Intentintent,intstartId){super.onStart(intent,startId);}publicvoidonDestroy(){}}packageimportandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;publicclassServiceActivityextendsActivity/**Calledwhentheactivityisfirstcreated.*/Buttonstart,stop,exit;publicvoidonCreate(BundlesavedInstanceState){//startService(newIntent(ServiceActivity.this,MyService.class));}privateOnClickListenerstartlis=newOnClickListener(){publicvoidonClick(Viewv)//TODOAuto-generatedmethodstartService(newIntent(ServiceActivity.this,//}privateOnClickListenerstoplis=newOnClickListener(){publicvoidonClick(Viewv)//TODOAuto-generatedmethodstopService(newIntent(ServiceActivity.this,//}privateOnClickListenerexitlis=newOnClickListener(){publicvoidonClick(Viewv)//TODOAuto-generatedmethodstopService(newIntent(ServiceActivity.this,MyService.class));//}publicvoidstart=(Button)findViewById(R.id.start);stop=(Button)findViewById(R.id.stop);exit=(Button)findViewById(R.id.exit);}}用来音频、、流。包含Audio和的功能 12)setURI设置源地址注意:本例程需要在SDcard 下添加test.mp4文件packagecom.xhch.importimportandroid.content.pm.ActivityInfo;importandroid.os.Bundle;importimportandroid.view.WindowManager;importimportandroid.widget.View;publicclassextendsActivity{/**Calledwhentheactivityisfirstcreated.*/publicvoidonCreate(BundlesavedInstanceState){WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置为Viewvv;/*设置模式-进度条}}<?xmlversion="1.0"encoding="utf-<LinearLayout android:orientation="vertical"><android:layout_height="wrap_content" 为了改进应用程序菜单的实用性,Android为幕提供了三个阶段优化Android 它显示多达6个图标和文字的菜单项(子菜单)。7.5.1checkbox,radiobuttoncheckboxradiobuttonBackMore(如图表。这个菜单中可以显示全文字、快捷键、checkboxradiobutton。7.5.2Backicon这种东西在移动设备上使用尤其的不合适。Android7.5.3Sub的子菜单时,它的菜单项会显示在一个漂浮的菜单框上,如图7.5.3所示7.5.3注意:子菜单的名字显示在头条(Headerbar)上,它的子菜单显示为全文本、checkbox(如果需要)AndroidBack图7.5.4 图7.5.5图7.5.6 图7.5.7图 图 图 7.5.4效果:该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用创建框方法protectedvoiddialog()AlertDialog.BuilderbuildernewBuilder(Main.this);builder.setPositiveButton("确认newOnClickListener()publicvoidonClick(DialogInterfacedialog,intwhich){}builder.setNegativeButton("取消newOnClickListener()publicvoidonClick(DialogInterfacedialog,intwhich){}}onKeyDown(intkeyCode,KeyEventevent)publicbooleanonKeyDown(intkeyCode,KeyEventevent)if(keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()}

return}图7.5.5效果:改变了框的图表,添加了三个按Dialogdialog=newAlertDialog.Builder(this).setIcon(newOnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhich)//TODOAuto-generatedmethodstubToast.makeText(Main.this,"我很喜欢他的。",}}).setNegativeButton("不喜欢newOnClickListener()publicvoidonClick(DialogInterfacedialog,intwhich)//TODOAuto-generatedmethodstubToast.makeText(Main.this,"我不喜欢他的。",}

}).setNeutralButton("一般newOnClickListener()publicvoidonClick(DialogInterfacedialog,intwhich)//TODOAuto-generatedmethodstubToast.makeText(Main.this谈不上喜欢不喜欢。",}

7.5.6效果:ViewnewAlertDialog.Builder(this).setTitle("请输入").setIcon(newEditText(this)).setPositiveButton("确定.setNegativeButton("取消7.5.7效果:newString[]{"Item1","Item2"},null,",.setNegativeButton("取消7.5.8效果:newAlertDialog.Builder(this).setTitle("单选框").setIcon(newString[]{"Item1","Item2"},0,newDialogInterface.OnClickListener()publicvoidonClick(DialogInterfacedialog,intwhich){}",7.5.9效果:newStringItem1"Item2null).setNegativeButton("确定",null).show();7.5.10效果:<?xmlversion="1.0"encoding="utf-<LinearLayout android:orientation="horizontal">android:text=":"/>android:minWidth="100dip"/>LayoutInflaterinflater=getLayoutInflater();Viewlayout=(ViewGroup)",",string.xml<?xmlversion="1.0"encoding="utf-<stringname="o">oWorld,<stringname="app_name"><stringname="text">我要那天,再不遮我眼;"\n"我要那地,再<stringname="txt1">设置颜色<stringname="txt2">设置字体<stringname="txt3">设置背景main.xml<?xmlversion="1.0"encoding="utf-<LinearLayout android:orientation="vertical">android:text="@string/o"/>android:gravity="center_vertical"android:text="@string/text"/>编写_Test.java文件publicbooleanonCreateOptions )//TODOAuto-generatedmethod 1=.addSub("添加"); 2=.addSub("壁纸"); 3=.addSub("搜索"); 4=.addSub("通知"); 5=.addSub("设置");Itemitem1=5.add("字体颜色");Itemitem2=5.add("字体大小");Itemitem3=5.add("控件背景}}创建框的方法item1.setOnItemClickListener(newOnItemClickListener(){publicbooleanonItemClick(Itemitem)//TODOAuto-generatedmethodBuilderbuilder=newAlertDialog.Builder(_Test.this);builder.setItems(newString[]红色","黄色","蓝色publicvoidonClick(DialogInterfacedialog,intwhich)//TODOAuto-generatedmethodswitch(which)casecase1:case2:}}

return}具体源码请参考光盘\Android开发指导书\Android例程\7.6.1所示效果图。7.6.1Demo是通过单击【选择日期】按钮和【选择时间】按钮弹出日期或者时间的框,然后设置日期或者时间,设置完成后会在文本7.6.2res/layout/main.xml<?xmlversion="1.0"encoding="utf-<LinearLayout android:orientation="vertical">android:orientation="horizontal">android:layout_weight="1"/>android:text="选择日期"/>android:orientation="horizontal">android:layout_weight="1"/>android:text="选择时间"/>packagecom.xhch.time;importjava.util.Calendar;importandroid.app.Activity;importandroid.app.DatePickerDialog;importandroid.app.Dialog;importandroid.app.TimePickerDialog;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.view.View;importandroid.widget.Button;importandroid.widget.DatePicker;importandroid.widget.EditText;importandroid.widget.TimePicker;publicclassTimeextendsActivityprivateEditTextshowDate=null;privateButtonpickDate=null;privateEditTextshowTime=null;privateButtonpickTime=null;privatestaticfinalintSHOW_DATAPICK=0;privatestaticfinalintDATE_DIALOG_ID=1;privatestaticfinalintSHOW_TIMEPICK=2;privatestaticfinalintTIME_DIALOG_ID=3;privateintmYear;privateintmMonth;privateintmDay;privateintmHour;privateintmMinute;/**Calledwhentheactivityisfirstcreated.*/publicvoidonCreate(BundlesavedInstanceState){finalCalendarc=Calendar.getInstance();mYear=c.get(Calendar.YEAR);mMonth=c.get(Calendar.MONTH);mDay=c.get(Calendar.DAY_OF_MONTH);mHour=c.get(Calendar.HOUR_OF_DAY);mMinute=c.get(Calendar.MINUTE);}*初始化控件和UIprivatevoidshowDate=(EditText)findViewById(R.id.showdate);pickDate=(Button)findViewById(R.id.pickdate);showTime=(EditText)findViewById(R.id.showtime);pickTime=(Button)findViewById(R.id.picktime);pickDate.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){Messagemsg=newMessage();if(pickDate.

温馨提示

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

评论

0/150

提交评论