AndroidinActionSECONDEDITIONW.FRANKABLESONROBISENCHRISKINGRevisedEditionofUnlockingAndroidMANNINGGreenwich(74°w.long.)ForonlineinformationandorderingofthisandotherManningbooks,pleasevisit:orders@manning.com©2011byManningPublicationsCo.Allrightsreserved.Nopartofthispublicationmaybereproduced,storedinaretrievalsystem,ortransmitted,inanyformorbymeanselectronic,mechanical,photocopying,orotherwise,withoutpriorwrittenpermissionofthepublisher.Manyofthedesignationsusedbymanufacturersandsellerstodistinguishtheirproductsareclaimedastrademarks.Wherethosedesignationsappearinthebook,andManningPublicationswasawareofatrademarkclaim,thedesignationshavebeenprintedininitialcapsorallcaps.Recognizingtheimportanceofpreservingwhathasbeenwritten,itisManning’spolicytohavethebookswepublishprintedonacid-freepaper,andweexertourbesteffortstothatend.Recognizingalsoourresponsibilitytoconservetheresourcesofourplanet,Manningbooksareprintedonpaperthatisatleast15percentrecycledandprocessedwithouttheuseofelementalchlorineManningPublicationsCo.Developmenteditor:TroyMott180BroadSt.Copyeditors:JoanCelmer,LizWelchSuite1323Typesetter:DottieMarsicoStamford,CT06901Coverdesigner:MarijaTudorISBN978-1-935182-72-6PrintedintheUnitedStatesofAmerica12345678910–MAL–161514131211vbriefcontentsPART1WHATISANDROID?—THEBIGPICTURE........................11■IntroducingAndroid32■Android’sdevelopmentenvironment31PART2EXERCISINGTHEANDROIDSDK..................................613■Userinterfaces634■IntentsandServices1015■Storingandretrievingdata1296■Networkingandwebservices1597■Telephony1878■Notificationsandalarms2059■Graphicsandanimation22210■Multimedia24611■Location,location,location267PART3ANDROIDAPPLICATIONS............................................29112■PuttingAndroidtoworkinafieldserviceapplication29313■BuildingAndroidapplicationsinC338BRIEFCONTENTSviPART4THEMATURINGPLATFORM........................................36514■Bluetoothandsensors36715■Integration38716■Androidwebdevelopment42117■AppWidgets45418■Localization49119■AndroidNativeDevelopmentKit506viicontentsprefacexviiprefacetothefirsteditionxixacknowledgmentsxxiaboutthisbookxxivaboutthecoverillustrationxxixPART1WHATISANDROID?—THEBIGPICTURE...............11IntroducingAndroid31.1TheAndroidplatform41.2UnderstandingtheAndroidmarket5Mobileoperators5■Androidvs.thefeaturephones6Androidvs.thesmartphones7■Androidvs.itself8LicensingAndroid91.3ThelayersofAndroid10BuildingontheLinuxkernel11■RunningintheDalvikVM121.4TheIntentofAndroiddevelopment12EmpoweringintuitiveUIs13■Intentsandhowtheywork13CONTENTSviii1.5FourkindsofAndroidcomponents17Activity17■Service18■BroadcastReceiver19ContentProvider221.6UnderstandingtheAndroidManifest.xmlfile241.7Mappingapplicationstoprocesses251.8CreatinganAndroidapplication261.9Summary302Android’sdevelopmentenvironment312.1IntroducingtheAndroidSDK32CoreAndroidpackages33■Optionalpackages342.2Exploringthedevelopmentenvironment34TheJavaperspective35■TheDDMSperspective37Command-linetools402.3BuildinganAndroidapplicationinEclipse43TheAndroidProjectWizard43■Androidsampleapplicationcode44■Packagingtheapplication502.4UsingtheAndroidemulator51Settinguptheemulatedenvironment52Testingyourapplicationintheemulator562.5Debuggingyourapplication572.6Summary58PART2EXERCISINGTHEANDROIDSDK.........................613Userinterfaces633.1CreatingtheActivity65CreatinganActivityclass66■ExploringtheActivitylifecycle713.2Workingwithviews74Exploringcommonviews75■UsingaListView77MultitaskingwithHandlerandMessage81Creatingcustomviews82■Understandinglayout84Handlingfocus86■Graspingevents873.3Usingresources89Supportedresourcetypes89■ReferencingresourcesinJava89DefiningviewsandlayoutsthroughXMLresources92Externalizingvalues94■Providinganimations97CONTENTSix3.4ExploringtheAndroidManifestfile983.5Summary994IntentsandServices1014.1ServingupRestaurantFinderwithIntent102DefiningIntents102■Implicitandexplicitinvocation103AddingexternallinkstoRestaurantFinder104■FindingyourwaywithIntent106■TakingadvantageofAndroid-providedactivities1084.2CheckingtheweatherwithacustomURI109OfferingacustomURI109■InspectingacustomUri1114.3Checkingtheweatherwithbroadcastreceivers113BroadcastingIntent113■Creatingareceiver1154.4Buildingabackgroundweatherservice1154.5CommunicatingwiththeWeatherAlertServicefromotherapps119AndroidInterfaceDefinitionLanguage119■BinderandParcelable121■Exposingaremoteinterface122BindingtoaService123■Startingversusbinding126Servicelifecycle1274.6Summary1285Storingandretrievingdata1295.1Usingpreferences130WorkingwithSharedPreferences130■Preferenceaccesspermissions1335.2Usingthefilesystem136Creatingfiles136■Accessingfiles137■Filesasrawresources138■XMLfileresources139■ExternalstorageviaanSDcard1415.3Persistingdatatoadatabase144Buildingandaccessingadatabase144■Usingthesqlite3tool1495.4WorkingwithContentProviderclasses149UsinganexistingContent