Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes,...

151
Programmation objets, web et mobiles (JAVA) Licence 3 Professionnelle - Multimédia Philippe Esling ([email protected]) Maître de conférences – UPMC Equipe représentations musicales (IRCAM, Paris) Programmation Androïd

Transcript of Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes,...

Page 1: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Programmationobjets,webetmobiles(JAVA)

Licence3Professionnelle- MultimédiaPhilippeEsling ([email protected])Maîtredeconférences– UPMC

Equipereprésentationsmusicales(IRCAM,Paris)

ProgrammationAndroïd

Page 2: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Sommaire• Unpeud'historique• Andoid OScommemiddleware– Applicationsetévènementsgérésparlemiddleware

– UneapprochedéclarativedesIHMenXML– UneconfigurationenXML– LinuxetJava• sanslaJVMmaisavecuneDVM

• Principesdebase• Cen’estqu’uneintroduction…

Page 3: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Android:lesobjectifs

• http://www.android.com• http://www.OpenHandsetAlliance.com“…OpenHandset Alliance™,agroupof47technologyandmobilecompanies havecometogether toaccelerateinnovationinmobileandoffer consumers aricher,lessexpensive,andbetter mobileexperience.

•Together we havedeveloped Android™,thefirstcomplete,open,andfreemobileplatform.•We arecommitted tocommercially deploy handsetsandservicesusing theAndroidPlatform.“

Page 4: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Android ?• Uneplateformeouverte• +unensembledelibrairies,decomposantslogicielspourlessystèmesembarquésetmobiles– Unsystèmed’exploitation

• Linux– Unintergiciel (middleware)– Nombreuseslibrairies

• IHM,• Téléphonie,• Multimédia,• Capteurs,• Internet,cartographie

Page 5: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

PourquoiAndroid?

• Indépendantd’unearchitecturematérielle– Avecdescontraintesmatériellesàrespecterparlesintégrateurs

• Dédiéauxsystèmesembarquésmaispasseulement

• AmbitionsdeGoogle/Apple–Marketing– Lesapplications• NombreusesetgratuitessurAndroidMarket• NombreusesetpayantessurAppStore

Page 6: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Applicationsgratuites(2011)

Page 7: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Lesautres

• Apple• Microsoft• Nokia• Palm• Research inMotion(BlackBerry)• Symbian• QuiddeJavaFX etjavaME ?….– javaFX/Flashprometteurmais:

• Lancéen2009,quil’utilise?– http://java.sun.com/javafx/1/tutorials/core/

– javaME obsolète?• Smartphone?Pourlespaysrichesetémergents?

Page 8: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Projections

Page 9: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Android lesgrandeslignes

• ComposantsAndroid• OutilsdeDéveloppement• ArchitectureLogicielle• Développement– enjava(J)– quelquesdirectives– configurationsensyntaxeXML

• Deuxexemples– Démonstration

• Deuxexemplesenquelqueslignesdejava

Page 10: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ComposantsAndroid• Frameworkdedéploiementd’applications• Dalvik commemachinevirtuelle(àregistres!=JVMàpile)

• Navigateurintégré,WebKit (webkit safari,GoogleChrome…)

• SQLite (Basededonnées)• MultimédiasupportPNG,JPG,GIF,MPEG4,MP3• Dépendantdumatériel– GSM– Bluetooth,EDGE,3G,WiFi– Caméra,GPS,boussoleetaccéléromètre– Température,

Page 11: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Outilsdedéveloppement• SDKAndroid

–Enlignedecommandes–Plug-insouseclipse–Émulateur–Débogueur–Tracesfinesd’exécution–Testsunitaires–Outilsdemiseaupoint

•Mesuredemémoireetperformance

Page 12: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ComposantsAndroid

http://developer.android.com/guide/basics/what-is-android.html

Page 13: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

AndroidOS

• Un ensemble d’API

– http://developer.android.com/guide/basics/what-is-android.html

Page 14: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

MiddlewareAndroid OS (extrait)• ViewSystem listes,boutons,…navigateur(WebView)

• ResourceManager,accèsauxString,auxdescriptifsdelihm– R.java …

• ActivityManager gestionducycledevied’uneapplication– Uneapplicationandroid peutêtrecomposéedeplusieursactivités

• ContentProviders Accèsauxdonnéesd’autresapplications

– partage,persistancededonnées

• NotificationManager autorisedesalertesdanslabarredestatut

• TelephonyManager

Page 15: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Librairies

C/C++…

•SGL comme moteur pour le 2D•FreeType comme fontes de caractères

Page 16: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Dalvik VM,aulieudeJVM

• Machinesàregistres

• ChaqueapplicationàsapropreDVM–Communicationinter-applicationsassuréeparlemiddleware–MultithreadassuréparLinux–AccèsauxcapteursparlenoyauLinux

Page 17: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Développementd’uneapplication

Pourdévelopperuneapplication,nousallonsutiliserEclipseetdesmécanismessimples1. Obtentiondes.class2. Générationdel’APK,(Android Packagefile)

Page 18: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

1.Obtentiondes.class

• FichierdeconfigurationXML– UnsourceJavaestgénéré,lefichierderessourcesR.java• Configurationdel’application,IHM,String,…

– Approchedéclarativedel’IHM

• java– Paquetagejava.lang,

• AttentioncenesontpasleslibrairiesduJavaSE(android.jar n’estpasrt.jar)

• Compilateurjavac deSun/Oracle– javac –bootclasspath android.jar android/introduction/*.java

Page 19: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

19

1er exercice

• Créer une applicationtrès simple

• Lancersurémulateur• Lancersurtéléphone• Examinersa structure

Page 20: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

20

GoogleTutorial

• Commençons parcréer unprojet• (Etvérifier queleSDKEclipsemarche)• StartEclipse(Start->AllPrograms->Eclipse)• CreateanAndroidVirtualDevice(AVD)• CreateaNewAndroidProject

Page 21: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SetupAndroidSDK

21

• DownloadAndroidSDKandextractthezipfiletoanarbitraryfolder– http://androidappdocs.appspot.com/sdk/index.html

– E.g.:extracttoC:\– TheSDKwillbeusedbyADTineclipse

Page 22: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SetupADTplugin

22

• InstallEclipseADTplugin– EclipsemustbeJ2EEedition,3.5recommended

– Updatesite:https://dl-ssl.google.com/android/eclipse/

– Installallthepluginsintherepository

– Restartneededafterinstallation

Page 23: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ConfigureADTPlugin

23

• OpeneclipseWindow->Preferences,selectAndroid

• SetuptheSDKlocationasthefolderwhereyouextractedthedownloadedSDKzipfile

Page 24: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SetupSDKAPIs

24

• OpenWindow->AndroidSDKandAVDManager• ClickAvailablePackagesandthenchooseproperAPIstoinstall,thelatestmaybethebest

Page 25: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SetupEmulators

25

• AfterSDKAPIsinstallation,clickVirtualDevices

• Clicknew,therewillbeadialog– inputaname– choosearunningtargetandaskin

– specifytheSDcardsize

Page 26: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Ready…

26

• NowyoumaystarttheAVD– ClickstarttostartthenewAVD

– Firststart-upmaytakeavery longtime

Page 27: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

CreateanewAndroidProject

27

• OpenFile->New->Androidproject– Projectname– BuildTarget– Applicationname– Packagename– CreateActivity

Page 28: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

HelloWorldProject

28

• src:sourcefolder• gen:SDKgeneratedfile• android2.2:referencelib• assets:binaryresources• res:resourcefilesandresourcedescriptionfiles

• AndroidManifest.xml:applicationdescriptionfile

• default.properties:projectpropertiesfile

Page 29: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SayHelloWorld

29

• modifyHelloWorld.java

Page 30: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

RunHelloWorld

30

• SelectHelloWorld Project,Run->Runas->AndroidApplication

• ADTwillstartaproperAVDandrunHelloWorldapponit

Page 31: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

RClass

• Auto-generated:youshouldn’teditit• ContainsIDsoftheprojectresources• Enforcesgoodsoftwareengineering• UsefindViewByIdandResourcesobjecttogetaccesstotheresources– Ex.Buttonb=(Button)findViewById(R.id.button1)– Ex.getResources().getString(R.string.hello));

Page 32: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

BehindHelloWorld #1

32

• R.java,generatedbyAndroidSDK,representsalltheresourcesoftheapp.resourcesareallinres folder

• resourcesarepre-compiledintobinaryformat/* AUTO-GENERATED FILE. DO NOT MODIFY.** This class was automatically generated by the* aapt tool from the resource data it found. It* should not be modified by hand.*/package sample.hello;public final class R {

public static final class attr {}public static final class drawable {

public static final int icon=0x7f020000;}public static final class layout {

public static final int main=0x7f030000;}public static final class string {

public static final int app_name=0x7f040001;public static final int hello=0x7f040000;

}}

Page 33: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

XML

• Usedtodefinesomeoftheresources– Layouts(UI)– Strings

• Manifestfile• Shouldn’tusuallyhavetoedititdirectly,Eclipsecandothatforyou

• PreferredwayofcreatingUIs– Separatesthedescriptionofthelayoutfromanyactualcodethatcontrolsit

– CaneasilytakeaUIfromoneplatformtoanother

Page 34: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

LinearLayout

BehindHelloWorld #2

34

• res/layout,containslayoutdeclarationsoftheapp,inXMLformat,UIsarebuiltaccordingtothelayoutfile

main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout

xmlns:android=http://schemas.android.com/apk/res/androidandroid:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:layout_width="fill_parent"

android:layout_height="wrap_content" android:text="@string/hello" />

</LinearLayout>

TextView,displaystatictext

AreferencetoStringresource

‘hello’

Page 35: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Strings

• Inres/values– strings.xml

• Applicationwideavailablestrings• Promotesgoodsoftwareengineering• UIcomponentsmadeintheUIeditorshouldhavetextdefinedinstrings.xml

• Stringsarejustonekindof‘Value’therearemanyothers

Page 36: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

referencedinres/layout/mai

n.xml

BehindHelloWorld #3

36

• res/values,containsstringdeclarationsorothervalues(e.g.:colors)oftheapp– string.xml,containsstringresources

<?xml version="1.0" encoding="utf-8"?><resources>

<string name="hello">Hello World, HelloWorld!</string><string name="app_name">HelloWorld</string>

</resources>

referencedinAndroidManifest.xml

Page 37: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

BehindHelloWorld #4

37

• res/drawable,containsallimageresources– foldersmayhavesuffixes,appwillchoosethemostsuitableone,sodotheotherresources

– threefolders:drawable-ldpi,drawable-hdpi,drawable-mdpi,eachcontainsanicon.pngfile

– appwillchoosethepropericonaccordingtothedeviceDPI

– referencename:@drawable/icon• otherfolderswemayuseinfuture– menu,anim (animation),xml(preferenceandsearchable)

Page 38: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

BehindHelloWorld #5

38

• AndroidManifest.xmldescribetheapplication– declareapp’sname,version,icon,permission,etc…– declaretheapplication'scomponents:activity,service,receiverorprovider

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="sample.hello" android:versionCode="1" android:versionName="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name=".HelloWorld" android:label="@string/app_name"><intent-filter>

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.LAUNCHER”/>

</intent-filter></activity>

</application><uses-sdk android:minSdkVersion="8" /></manifest>

Page 39: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ManifestFile(1)

• Containscharacteristicsaboutyourapplication• WhenhavemorethanoneActivityinapp,NEEDto

specifyitinmanifestfile– Gotographicalviewofthemanifestfile– AddanActivityinthebottomright– Browseforthenameoftheactivity

• NeedtospecifyServicesandothercomponentstoo• Alsoimportanttodefinepermissionsandexternal

libraries,likeGoogleMapsAPI

Page 40: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ManifestFile– AddinganActivity

Page 41: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

AndroidProgrammingComponents

• Activity– http://developer.android.com/guide/topics/fundamentals/activities.html

• Service– http://developer.android.com/guide/topics/fundamentals/services.html

• ContentProviders• BroadcastReceivers• Androidinanutshell:

– http://developer.android.com/guide/topics/fundamentals.html

Page 42: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Activities(1)

• Thebasisofandroidapplications• AsingleActivitydefinesasingleviewablescreen– theactions,notthelayout

• Canhavemultipleperapplication• Eachisaseparateentity• Theyhaveastructuredlifecycle– Differenteventsintheirlifehappeneitherviatheusertouchingbuttonsorprogrammatically

Page 43: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Activities(2)

Page 44: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

@2011 Mihail L. Sichitiu 44

Activity

• AnAndroidactivityisfocusedonasinglethingausercando.

• Mostapplicationshavemultipleactivities

Page 45: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

@2011 Mihail L. Sichitiu 45

Activitiesstarteachother

Page 46: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Services(1)

• Runinthebackground– CancontinueevenifActivitythatstarteditdies– Shouldbeusedifsomethingneedstobedonewhiletheuserisnot

interactingwithapplication• Otherwise,athreadisprobablymoreapplicable

– Shouldcreateanewthreadintheservicetodoworkin,sincetheservicerunsinthemainthread

• Canbeboundtoanapplication– Inwhichcasewillterminatewhenallapplicationsboundtoitunbind– Allowsmultipleapplicationstocommunicatewithitviaacommon

interface• Needstobedeclaredinmanifestfile• LikeActivities,hasastructuredlifecycle

Page 47: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Services(2)

Page 48: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Exercice 2

48

• Buildupanappthatyoucaninputyourgreetingsanddisplayyourgreetings– Input:EditText– Display:TextView– Ofcourse,wehavetoaddanbutton

• Editres/layout/main.xmlfiletoaddthesecomponents– eachhasanandroid:id property,usedtoreferenceitincode

Cheat – Lookatthe« Layout tab »atthebottom ofEclipseJ

Page 49: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

BeyondHelloWorld #2

49

• modifyHelloWorld.java– firstlygetthereferencesdeclaredinmain.xml

– thenaddeventresponseforButton

Page 50: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

BeyondHelloWorld #3

50

• Finished!• Run->Runas->AndroidApplication

• Quiteeasy,isn’tit?

Page 51: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

RunninginEclipse(1)

• SimilartolaunchingaregularJavaapp,usethelaunchconfigurations

• SpecifyanAndroidApplicationandcreateanewone

• Specifyactivitytoberun• Canselectamanualoption,soeachtimeprogramisrun,youareaskedwhetheryouwanttousetheactualphoneortheemulator– Otherwise,itshouldbesmartandusewhicheveroneisavailable

Page 52: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

RunninginEclipse(2)

Page 53: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

RunninginEclipse(3)

Page 54: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

RunninginEclipse(4)

Page 55: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

@2011 Mihail L. Sichitiu 55

Introduceabugpackagecom.example.helloandroid;

importandroid.app.Activity;importandroid.os.Bundle;

publicclassHelloAndroidextendsActivity{/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);Objecto=null;o.toString();setContentView(R.layout.main);

}}

Page 56: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

@2011 Mihail L. Sichitiu 56

Runit!

Page 57: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

USBDebugging

• Shouldbeenabledonphonetousedeveloperfeatures

• InthemainappsscreenselectSettings->Applications->Development->USBdebugging(itneedstobechecked)

Page 58: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

AndroidDebugBridge

• Usedforawidevarietyofdevelopertasks– Readfromthelogfile– Showwhatandroiddevicesareavailable– Installandroidapplications(.apkfiles)

• Inthe‘platform-tools’directoryofthemainandroidsdkdirectory– Recommendputtingthisdirectoryandthe‘tools’directoryonthesystempath

• adb.exe

Page 59: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Debugging

• InsteadofusingtraditionalSystem.out.println,usetheLogclass– Importedwithandroid.util.Log– Multipletypesofoutput(debug,warning,error,…)– Log.d(<tag>,<string>)

• Canbereadusinglogcat.– Printoutthewholelog,whichauto-updates

• adblogcat– Eraselog

• adblogcat–c– Filteroutputviatags

• adblogcat<tag>:<msgtype>*:S• canhavemultiple<tag>:<msgtype>filters• <msgtype>correspondstodebug,warning,error,etc.• IfuseLog.d(),then<msgtype>=D

• Reference– http://developer.android.com/guide/developing/debugging/debugging-log.html

Page 60: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

res/layout/main.xml• Declareslayouts&widgetsfortheactivity

60Treefrom:http://developer.android.com/guide/topics/ui/index.html

Page 61: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

VariousLayouts

http://developer.android.com/resources/tutorials/views/index.html 61

Page 62: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

VariousWidgets

http://developer.android.com/resources/tutorials/views/index.html62

Page 63: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

@2011 Mihail L. Sichitiu 63

HelloAndroid.java

package com.example.helloandroid;

import android.app.Activity;import android.os.Bundle;public class HelloAndroid extends Activity {

/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); setContentView(R.layout.main);

}}

Set the layout of the view as described in the main.xml layout

Page 64: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Développement1/2Fichierdeconfiguration,AndroitManifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="test.biblio"android:versionCode="1"android:versionName="1.0">

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

<applicationandroid:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".Demo"

android:label="@string/app_name">

<intent-filter><actionandroid:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

</application>

</manifest>

Page 65: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

FichierdeRessourcesXMLassocié

• Répertoireres/–Projeteclipse

• res/layout/main.xml

<?xmlversion="1.0" encoding="utf-8"?><LinearLayoutandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">…</LinearLayout>

Page 66: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

FichierdeRessourcesXMLassocié<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent »/>

<TextView android:id="@+id/TextViewPrenom’android:layout_width="fill_parent »android:layout_height="wrap_content »android:text="@string/prenom »/>

<LinearLayout android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content »>

<EditText android:id="@+id/EditTextPrenom"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:layout_gravity="bottom"android:hint="@string/prenomHint »/>

<Button android:id="@+id/ButtonEnvoyer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/bouton »/>

</LinearLayout>

<TextView android:id="@+id/TextViewHello"android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_gravity="center_horizontal"android:textSize="@dimen/dimMessage"android:textColor="@color/couleurMessage »/>

</LinearLayout>

Page 67: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

LefichierR.java

• /test/biblio/R.javaAUTO-GENERATEDFILE.DONOTMODIFY.

package test.biblio;public final class R {…public static final class layout {public static final intmain=0x7f030000;

}}

Page 68: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Unpremiersourcejava,justepourlasyntaxe…

packagetest.biblio;import android.app.Activity;import android.os.Bundle;

public class Demo extends Activity {….

@Overridepublicvoid onCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);

setContentView(R.layout.main);//associationIHM<->Activity….

}}

package test.biblio;public final class R {…public static final class layout {public static final intmain=0x7f030000;

}}

Page 69: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Unpremiersourcejava,justepourlasyntaxe…

public class Demo extends Activity {private EditText editText;private Button button;

publicvoid onCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);

setContentView(R.layout.main);//association//récupérationdel'EditText grâceàsonIDeditText =(EditText)findViewById(R.id.EditTextPrenom);//récupérationduboutongrâceàsonIDbutton =(Button)findViewById(R.id.ButtonEnvoyer);//onappliqueunécouteurd'évenement aucliquesurleboutonbutton.setOnClickListener(newOnClickListener(){

@Overridepublicvoid onClick(View v){

??//Onrécupèreletexteécritdansl'EditText??//Oncréeunepop-upToast??//Onaffecteletextedansl’objetTextView

}}

);}}

Page 70: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Obtentiondel’application

• Detousles.classen.dex– DelaJVMàlamachineDalvik– D’unemachineàpileenmachineàregistres

• Générationdel’application.apk– Unearchivesignée– Téléchargement:émulateuroumobile

Page 71: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Générationdel’application

Source:http://stuffthathappens.com/blog/wp-content/uploads/2008/11/android_flow.png

Page 72: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Développement2/2,suite

• Du.classen.dex– Assemblagedetousles.classversun.dex– Unemachineparapplication,unprocessusLinux

– Lesapplicationscommuniquentvial’intergiciel• Uneapplicationpeutêtrecomposéedeplusieursactivités• Lesactivitéscommuniquentviadesvariablesglobales,delamémoirepersistante,…

• Générationdel’application.apk– Assemblage,éditiondesliens– Unearchivesignée

– Téléchargement:émulateuroumobile

Page 73: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

IntroductionauxApplications• Uneprésentation,unvocabulaire

• Mots-clés– Applications,– Communication,évènements,intentions,– Servicesentâchedefond,– Persistance.

• UneApplicationestcomposéed’uneoudeplusieursActivity– Uneactivity– Surchargedecertainesméthodes,

• Dudéjàvu:Applet,MIDlet,Servlet,…

– Lecycledevieestimposéparleframework• Déjàvu:pouruneAppletteinit()puisstart()…

Page 74: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Vocabulaire

• LesEssentiels

– Activity– BroadcastReceiver– Service– ContentProvider

Page 75: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Introduction…Classes• Activity

– Uneinterfaceutilisateur• Démarred’autresactivités,émetdesévènements(intentions,intent)

– UneconfigurationdetypeXML,permissions,librairies,

• BroadcastReceiver– Busdemessages– Émissionetréceptiond’intentions

• Service– Pasd’interface,unserviceàrendre,entachedefond– Intention deservir

• ContentProvider– Donnéesrenduespersistantes(pourd’autresapplications)– Unfichier,baseSQLite

Page 76: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Deuxexemples,deuxActivity

1. Installationd’unnavigateuren2lignes(WebView)

2. UnetoutepetiteIHM• Unécranconstituéd’unbouton,d’unécouteur,• Achaqueclic,l’heureestaffichée!

Page 77: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Activity UsageduWebKitimport android.app.Activity;import android.os.Bundle;import android.webkit.WebView;

public class BrowserDemo extends Activity {privateWebView browser;@Overridepublic void onCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);browser=(WebView)findViewById(R.id.webWiew);browser.loadUrl("http://upmc.fr/");

}}

2lignes

Page 78: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

OnCreateestdéclenchéparleframeworkAndroid

public class BrowserDemo extends Activity {private WebView browser;@Overridepublic void onCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);

//installationdel’IHMsetContentView(R.layout.main);

//accèsaucomposantgraphiquebrowser=(WebView)findViewById(R.id.webView);

browser.loadUrl("http://www.upmc.fr/");}

} R.layout.main, R.id.webView ?

Page 79: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

RetoursurlaconfigurationXML• R.id.webView?R.layout.main?

– EnEntrée•FichiersdeconfigurationXML

–EnSortie•SourceJava,R.java

Page 80: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

UneIHM,deuxièmeexemple

UneIHM

• Unbouton,unécouteur,unclicetl’heureestaffichée!

• Enapprochetraditionnelle• ToutestcodéenJavaIHMcomprise

– Enapprochedéclarative• Usaged’XMLpourlaconfiguration,dejavapour

l’utilisation

Page 81: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Clickpouractualiserl’heureimport android.app.Activity; import android.os.Bundle; import static android.view.View.OnClickListener ;import android.widget.Button; import java.util.Date;

public class Now extends Activity implements OnClickListener { private Button btn;

@Overridepublic void onCreate(Bundle bundle) {super.onCreate(bundle); btn = new Button(this); // <- un boutonbtn.setOnClickListener(this);// <- un écouteur auprès de cette vue

setContentView(btn); // <- le bouton occupe l’écran}

public void onClick(View view) { // <- à chaque clickbtn.setText(new Date().toString());

} }

Discussion:VueapparentéeswingIciunMVCàluitoutseul…

Page 82: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Activity,méthodesàredéfinir

• MonActivityextendsandroid.app.Activity;

@OverrideprotectedvoidonCreate(BundlesavedInstanceState){

Page 83: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

CoreComponents-Activity#1

83

• Basically,Anactivity presentsavisualuserinterfaceforonefocusedendeavortheusercanundertake

• Anapplicationmightconsistofjustoneactivityorseveral,eachActivityisderivedfromandroid.app.ActivityandshouldbedeclaredinAndroidManifest.xmlfile

• Eachactivityisgivenadefaultwindowtodrawin,thewindowmaybefullscreenorsmallerandontopofotherwindow

• Thevisualcontentofthewindowisprovidedbyahierarchyofviews— objectsderivedfromthebaseViewclass

• Activity.setContentView()methodisusedtosetacertainhierarchyofviewobjects

Page 84: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

CoreComponents-Activity#2

84

• Activitiesareactivatedbyasynchronousmessagescalledintents– AnintentisanIntentobjectthatholdsthecontentofthemessage

– TheactionbeingrequestedortheURIofthedatatoacton• The<intent-filter>labelinAndroidManifest.xmlfilespecifiestheIntentthatcanstarttheActivity

– declaresthemainactivity,itwillbestartedautomaticallywhentheappstarts

• Anactivityislaunched(orgivensomethingnewtodo)bypassinganIntentobjecttoContext.startActivity()orActivity.startActivityForResult()

Page 85: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

OtherCoreComponents

85

• Service– Aservice doesn'thaveavisualuserinterface,runsinthebackgroundforaperiodoftime

• Broadcastreceivers– acomponentthatdoesnothingbutreceiveandreacttobroadcastannouncements

• Contentproviders– Acontentprovidermakesaspecificsetoftheapplication'sdataavailabletootherapplications.

– Thedatacanbestoredinthefilesystem,inanSQLitedatabase,orinanyothermannerthatmakessense

Page 86: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

android.app.Activitypackageandroid.app;

publicclassActivity extends ApplicationContext {

protected void onCreate(BundlesavedInstanceState){

protected void onStart();

protected void onRestart();

protected void onResume();

protected void onPause();

protected void onStop();

protected void onDestroy();

…etc …}

induituncycledevieimposéparle« framework »

Page 87: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

InversiondeContrôle…Rappel

public class Activity extends ApplicationContext {

protected void onCreate(Bundle savedInstanceState);

protected void onStart();

…..}

Android,middleware

http://developer.android.com/reference/android/app/Activity.html

onCreate(..)onStart();

Activ

ités

activité_1 Activité2 Activité3

1

…activité_1=newActivité_1();activité_1.onCreate();activité_1.onStart();….

Page 88: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Petitesprécisions,rappels…

• Uneapplications’exécutedansunprocessusLinux

• Depuisceprocessus– lesméthodesd’uneactivitésontappeléesselonuncertainordre• onCreate …onPause….onResume…onPause….onResume…onDestroy

– L’appeldeonDestroy n’engendrepasl’arrêtduprocessusinitiateur

Page 89: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Démonstration,Activity danstoussesétats

public class BrowserDemo extends Activity {

private WebView browser;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.i("=======","onCreate");

// cf. page précédente

}

public void onDestroy(){

super.onDestroy();

Log.i("******", "onDestroy");

}

}

Page 90: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Enrésumé:émulateur+LogCat,tracesbienutiles

Page 91: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Activity danstoussesétatspublic class BrowserDemo extends Activity {

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.i("=======","onCreate");}

public voidonStart(){super.onStart();Log.i("=======","onStart");}

public void onResume(){super.onResume();Log.i("=======","onResume");

}

public void onPause(){super.onPause();Log.i("=======","onPause");

}

public void onStop(){super.onStop();Log.i("******","onStop");

}

public void onDestroy(){super.onDestroy();Log.i("******", "onDestroy");

}}

Page 92: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Vouspouveztoutsimuleravectelnet

1) telnetlocalhost5554

2-2)

3)

2-1)

OnPause

OnResume

2)

OnPause->onResume

Page 93: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Intentionde…porteruntoast

• IntentToast.makeText(context,intent.getStringExtra("message"),3000).show();

Toast!

Page 94: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Android:Intents,commeIntention

Il faut : • Un receveur

public class Receiver extends BroadcastReceiver {public void onReceive(Context context, Intent intent) {….

• Enregistrementauprèsdumiddleware• Uneintentiond’émettre• Ajusterlaconfiguration

sendBroadcast

Activ

ités

activité_1

extendsBroadcastRececeiveronReceive(){…}

<receiver android:name=".TestBroadcastReceiver"android:label="TestBroadcast receiver"/>

Page 95: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Intentionde

• Intent.ACTION_AIRPLANE_MODE_CHANGED,unabonnéàcetIntent

Émissiondel’intention:notificationintent=newIntent("PORTER_UN_TOAST");intent.putExtra("message",getResources().getString(R.string.message));sendBroadcast(intent);

Enregistrementauprèsdumiddleware:abonnementReceiverreceiver=newReceiver();registerReceiver(receiver,newIntentFilter("PORTER_UN_TOAST"));registerReceiver(receiver,newIntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED));

Unreceveur,quiporteuntoast:abonnépublicstaticclassReceiverextendsBroadcastReceiver{publicvoidonReceive(Contextcontext,Intentintent){Toast.makeText(context,intent.getStringExtra("message"),3000).show();}}

Page 96: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Intention…auprèsdumiddleware

• Intent.ACTION_AIRPLANE_MODE_CHANGED,jesuismaintenantabonnéàcetIntent

Enregistrementauprèsdumiddleware:Receiverreceiver=newReceiver();registerReceiver(receiver,newIntentFilter("PORTER_UN_TOAST"));

registerReceiver(receiver,newIntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED));

AvecprivatestaticfinalStringSMS_RECEIVED ="android.provider.Telephony.SMS_RECEIVED";

et

registerReceiver(receiver,newIntentFilter(SMS_RECEIVED));

Je suis maintenant abonné aux réception de SMS(si la permission est installée dans le AndroidManifest.xml)

Page 97: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SousAndroid

• Mediator,classeContext– http://developer.android.com/reference/android/content/Context.html

• Subscriber,classeBroadcastReceiver– http://developer.android.com/reference/android/content/BroadcastReceiver.html

• X,Ylesthèmes,classeIntent– http://developer.android.com/reference/android/content/Intent.html

• IntentFilter– http://developer.android.com/reference/android/content/IntentFilter.html

Page 98: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

IntentiondetéléphonerJ

• Intent

• CommeCommunication

• Démarreruneactivitéprédéfinie:téléphoner

Page 99: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

IntentiondetéléphonerpublicclassTelephoneextendsActivityimplementsOnClickListener {

publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);((Button)this.findViewById(R.id.Button01)).setOnClickListener(this);

}

publicvoidonClick(Viewv){Intentintent=newIntent(Intent.ACTION_DIAL);startActivity(intent);

}}

Page 100: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

EnImages,activitédetéléphoner

Clickempiler

Clickdépiler

Page 101: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Activitésunrésumé• Activity

– Cycledevie– Géréparleframework

• startActivity– Uneactivitépeutendémarreruneautre– Transmissiondesparamètresparlesintentions

• Communicationentredeuxactivités– Discussion

• UneApplicationpeutcontenirplusieursactivités– Communicationentreactivitésd’applicationsdifférentes

• Exempledescontacts

Page 102: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Service• Entachedefond

• Toujoursdisponible

– Locaux• Servicepersonnel,inaccessiblepourlesautresapplications

– Distants• Rmienplussimple…mêmemachine

• J’écouteunfichieraudiomp3,pendantquejenaviguesurleweb

Page 103: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

UnService

• Servicedistant,– Découverteduserviceparuneintention…

Android,middleware

Activ

ités

activité_1 Activité2 service

Services

Page 104: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SMSService:unexemple• UncompteurdeSMSreçus

– Achaquesmsreçuuncompteurestincrémenté– Serviceaccessiblepartouteapplication

• Leserviceal’intentionderecevoirdesSMS– IntentFilterfilter=newIntentFilter(SMS_RECEIVED);– registerReceiver(newSMSReceiver(),filter);

• Unclientrechercheraceservicevialemiddleware

• Leservice:SMSService

Page 105: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Service,aidl(androidinterfacedescriptionlanguage)packagecnam.android;

interfaceSMSService{voidstart();voidstop();longreceived();}

/*Thisfileisauto-generated.DONOTMODIFY.*/packagecnam.android;import…;publicinterfaceSMSServiceextendsandroid.os.IInterface{

/**Local-sideIPCimplementationstubclass.*/publicstaticabstractclassStubextendsandroid.os.Binderimplementscnam.android.SMSService{…

Page 106: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

LeClientrechercheleserviceprivateSMSServicestatsSMS;

bindService(new Intent(SMSService.class.getName()), connexion, Context.BIND_AUTO_CREATE);

}

// Traitement asynchrone de la réponse venant de l’intergiciel

private ServiceConnection connexion = new ServiceConnection() {public void onServiceConnected(ComponentName name, IBinder service) {Log.v("service","onServiceConnected()");

// réception de la soucheClient.this.statsSMS = SMSService.Stub.asInterface(service);

}

public void onServiceDisconnected(ComponentName name) {Client.this.statsSMS = null;

}};

Page 107: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Leservice1/3,réveilléàchaqueSMSpublic class SMSServiceImpl extends Service {

private static final String TAG = "SMSServiceImpl";private static final String SMS_RECEIVED =

"android.provider.Telephony.SMS_RECEIVED";

private boolean active;private int countSMSReceived;

public void onCreate() {super.onCreate();IntentFilter filter = new

IntentFilter(SMS_RECEIVED);registerReceiver(new SMSReceiver(), filter);

}

Page 108: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Leservice2/3,réveilléàchaqueSMSprivate class SMSReceiver extends BroadcastReceiver{

public SMSReceiver(){

Log.v("SMSReceiver","SMSReceiver()");

}

@Override

public void onReceive(Context context, Intent intent) {

Log.v("SMSReceiver","onReceive()");

if(active) SMSServiceImpl.this.countSMSReceived++;

}

}

Page 109: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Leservice3/3,Lasouchelestubfournieàlademande

public IBinder onBind(Intent arg0) {return new SMSServiceStubImpl();

}

public class SMSServiceStubImpl extends SMSService.Stub{

public long received() throws android.os.RemoteException{return SMSServiceImpl.this.countSMSReceived;

}

public void start(){active = true;

}public void stop() throws RemoteException {active = false;

}}

<serviceandroid:name=".SMSService"android:label="monservicedeSMS"/>

Page 110: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

LeClient,uneactivity

1. bind service2. start SMS count

telnet localhost 55543. sms send 12345 test

Page 111: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Servicescycledevie

Page 112: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ContentProvider• Sauvegardeetrestitutiondedonnées– Donnéesaccessiblesàtoutesapplications

• ContentProvider

– Persistance

– DAO/CRUD

• DataAccessObject• CreateRetrieveUpdateetDelete

Page 113: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

MesContacts,unclientleContentProvider prédéfini:phone

Page 114: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ContentProvider• ContentProvider,commelescontacts,accès

– ContentResolverresolver =getContentResolver();

Identificationdubon« Contentprovider »grâceàsonURI

– Uriuri=android.provider.Contacts.Phones.CONTENT_URI;– Strings=uri.toString();– //asserts.equals("content://contacts/phone");

– Appelderesolver.query• Pouruneinterrogation

– Parcoursàl’aided’un« Cursor »

Page 115: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

CursorcommeResultSet

Page 116: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SonpropreContentProvider• publicclassMonPropreProvider extendsContentProvider

• Avec– UneUri,l’accèsàmonpropre« contentprovider »

• content://cnam.android.agenda/liste• content://….

– Lesméthodes• insert,update,deleteetquery

– Etdanslefichierdeconfiguration<providerandroid:name="MonPropreProvider"

android:authorities="cnam.android.agenda" />

Page 117: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Exercicefinal• UneapplicationSMS

– 3Views• Contactsandstats• SMSCheck• Parameters

– NActivities (?)– 1Service– SMSreceive– L’applicationdoitauminimum

• Récupérerlalistedescontacts• Permettrededéfinirunensembledemessagestypes• Affichertouteslesinformations

– Cycledevie• L’applicationrécupèrelesSMS• Calculedesstatistiques(nombredemessageparcontact)• EffectueunenvoiautomatiquedeSMSderéponseenfonctiondesstats etdes

messagespré-enregistrés deréponse– Bonus?

P.Esling- JAVA- Cours1.Fondamentaux 117

Page 118: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Communicationinterapplications• Intent,commenotification

– Souscription/Publication

– Appeler,déclencheruneautreactivité• Avecéventuellementdesparamètresetdesrésultatsattendus

– L’intergicielsélectionnela« bonneapplication »• Selonlescritèresexigésparlesouscripteur• Critèrespréciséslorsdelapublication

– Nécessaireadéquationàl’exécutionservicesfournis/servicesrequis

Page 119: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

PatronPublish-Subscribe/Intent

• Source:http://roboticswikibook.org,rappel

Page 120: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SousAndroid

• Mediator,classeContext– http://developer.android.com/reference/android/content/Context.html

• Subscriber,classeBroadcastReceiver– http://developer.android.com/reference/android/content/BroadcastReceiver.html

• X,Ylesthèmes,classeIntent– http://developer.android.com/reference/android/content/Intent.html

• IntentFilter– http://developer.android.com/reference/android/content/IntentFilter.html

Page 121: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

3Exemples1. Unpublisher s’adresseàl’intergiciel– Uneactivitésouhaitetéléphoner…

• Àlarecherched’uneapplicationprédéfinie

2. Unsubscriber deSMSentrants– UneactivitésouhaitefiltrerlecontenudesSMSentrants…

• Installationd’unReceiver

3. Unpublisher etunsubscriber• Uneactivitésouhaitepublierunrésultatàl’intention

d’autresactivités• Lepublisherd’adresseàl’intergicielquisélectionnelesabonnés

Page 122: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Publisher:Unmobileàl’Intentiondetéléphoner

• Intent• Démarreruneactivitéprédéfinie:téléphoner,légitime…

public class TelephonerActivity extends Activity {

@Overrideprotected void onCreate(Bundle bundle) {super.onCreate(bundle);setContentView(R.layout.activity_now);

}

public void onClick(View view) {

Intent intent = new Intent();intent.setAction("android.intent.action.DIAL");this.startActivity(intent);

}

}

• android.app.Activity extends ….. extends android.content.Context

Page 123: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Publisher :Téléphoner• Lesouscripteuradûdéjàsouscrire…

• DiscussionsIntent intent = new Intent();intent.setAction("android.intent.action.DIAL");

– ÀlarecherchedelabonneapplicationeffectuéeparAndroid• Iciunnom("android.intent.action.DIAL");

• Plusieurséluspossibles• Composantlogiciels,• Maintenance• …

• Lepatronchaînederesponsabilitésestutilisé

Page 124: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Subcriber :RecevoirunSMS(souscrire)

– Lesouscripteurhéritedeandroid.content.BroadcastReceiver• Etimplémentecequ’ilfautfairelorsdelanotification

public class ReceiverSMS extends BroadcastReceiver{// à chaque SMS reçupublic void onReceive(Context ctxt, Intent intent) {// }

}

//àchaqueSMSreçu?

Adéquationintention(Intent)ReceiverSMS parunfiltre(IntentFilter)

Réalisation : tout en java ou directives XML …

Page 125: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

– Toutjava:unreceveur/souscripteurauseind’uneactivité

public class SMSActivity extends Activity {

private static class ReceiverSMS extends BroadcastReceiver{// à chaque SMS reçupublic void onReceive(Context ctxt, Intent intent) {// … }}

protected void onCreate(Bundle bundle) {super.onCreate(bundle);

final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

IntentFilter filter = new IntentFilter(SMS_RECEIVED);registerReceiver(new ReceiverSMS(), filter);

setContentView(R.layout.activity_now);}

Subcriber :RecevoirunSMS(souscrire)

Page 126: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Subcriber :Lereceveurendéclaratif<receiver android:name=".ReceveurDeSMS"android:exported="true" ><intent-filter android:priority="9999">

<action android:name="android.provider.Telephony.SMS_RECEIVED"/></intent-filter>

</receiver>

public class ReceveurDeSMS extends BroadcastReceiver{// à chaque SMS reçupublic void onReceive(Context ctxt, Intent intent) {// }

}

Chaîne de responsabilités

Page 127: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Publish/SubscribePlusieursReceveurs/souscripteurs,

l’undeuxpeutarrêterlapropagation,

uneprioritépeutêtreaffectéàchaquereceveur

Lalistedessouscripteursserait-elle:uneChaînederesponsabilitésavecpriorités?

Page 128: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Patronpublish/subscribe « Overtheair »• GoogleCloudMessaging

• Android2.2

• Message<=4ko

• Traficillimité– NécessiteuneinscriptionauprèsdeGoogle

• Avecdepréférenceuncomptegmaildédié

Page 129: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Publish/Subscribe « Overtheair »

• 1)Souscription

Page 130: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Publish/Subscribe « Overtheair »

• 2)Publication

Page 131: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Publish/Subscribe« Overtheair »

• 3)Notification

Page 132: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Publish/Subscribe « Overtheair »

• 3)Notification• Suiteetfin

Page 133: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SMSSending

• STEP1– IntheAndroidManifest.xml file,

addthetwopermissions-SEND_SMSandRECEIVE_SMS.

• STEP2– Inthemain.xml,addTextview

todisplay"Enterthephonenumberofrecipient“and"Message"

– EditText withidtxtPhoneNoandtxtMessage

– AddthebuttonID"SendSMS“

Page 134: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SMSSending

• Step3ImportClassesandInterfacesimport android.app.Activity;import android.app.PendingIntent;import android.content.Intent;import android.os.Bundle;import android.telephony.SmsManager;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;

Page 135: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SMSSending� Step4WritetheSMSclasspublic class SMS extends Activity {Button btnSendSMS;

EditText txtPhoneNo;

EditText txtMessage;

/** Called when the activity is first created. */@Override

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.main);

btnSendSMS = (Button) findViewById(R.id.btnSendSMS);

txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo);txtMessage = (EditText) findViewById(R.id.txtMessage);

btnSendSMS.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) { String phoneNo = txtPhoneNo.getText().toString();

String message = txtMessage.getText().toString();

if (phoneNo.length()>0 && message.length()>0)

sendSMS(phoneNo, message); else

Toast.makeText(getBaseContext(), "Please enter both phone number and message.",

Toast.LENGTH_SHORT).show();}

});

} }

Inputfromtheuser(i.e.,thephoneno,textmessageand

sendSMS isimplemented).

Page 136: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SMSSending

� Step5◦ TosendanSMSmessage,youusetheSmsManagerclass.AndtoinstantiatethisclasscallgetDefault()staticmethod.◦ ThesendTextMessage()methodsendstheSMSmessagewithaPendingIntent.◦ ThePendingIntent objectisusedtoidentifyatargettoinvokeatalatertime.

private void sendSMS(String phoneNumber, String message) {PendingIntent pi = PendingIntent.getActivity(this, 0,new Intent(this, SMS.class), 0);

SmsManager sms = SmsManager.getDefault();sms.sendTextMessage(phoneNumber, null, message, pi, null);

}

Page 137: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

SMSSending

Page 138: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ReceivingSMS

• Step1

Page 139: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ReceivingSMS

• Step2– IntheAndroidManifest.xml fileaddthe<receiver>elementsothatincoming

SMSmessagescanbeinterceptedbytheSmsReceiver class.<receiverandroid:name=".SmsReceiver">

<intent-filter><actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>

</intent-filter></receiver>

Page 140: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ReceivingSMS

• Step3import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.telephony.SmsMessage;

import android.widget.Toast;

Page 141: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ReceivingSMS� Step4

public class SmsReceiver extends BroadcastReceiver {

@Overridepublic void onReceive(Context context, Intent intent) {

//---get the SMS message passed in---

Bundle bundle = intent.getExtras();

SmsMessage[] msgs = null;

String str = "";

if (bundle != null){

//---retrieve the SMS message received---Object[] pdus = (Object[]) bundle.get("pdus");

msgs = new SmsMessage[pdus.length];

for (int i=0; i<msgs.length; i++) {

msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);

str += "SMS from " + msgs[i].getOriginatingAddress();

str += " :";

str += msgs[i].getMessageBody().toString();

str += "\n"; }

//---display the new SMS message---

Toast.makeText(context, str, Toast.LENGTH_SHORT).show();

}

}

}

IntheSmsReceiver class,extendtheBroadcastReceiver classand

overridetheonReceive()method.ThemessageisattachedtotheIntent

ThemessagesarestoredinaobjectarrayPDUformat.Toextracteachmessage,youusethestaticcreateFromPdu()methodfromtheSmsMessage class.TheSMSmessageisthendisplayedusingtheToastclass

Page 142: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ReceivingSMS

Page 143: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

GPS:AddLocationManagerpublic class GPSSimulator extends Activity {

private LocationManager lm;private LocationListener locationListener;

// Called when the activity is first created.@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.main);

// use the LocationManager class to obtain GPS locationslm = (LocationManager)

getSystemService(Context.LOCATION_SERVICE);

locationListener = new MyLocationListener();

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

} }

Page 144: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

private class MyLocationListener implements LocationListener {

@Overridepublic void onLocationChanged(Location loc) {

if (loc != null) {Toast.makeText(getBaseContext(),

"Location changed : Lat: " + loc.getLatitude() + " Lng: " + loc.getLongitude(), Toast.LENGTH_SHORT).show();

}}

@Overridepublic void onProviderDisabled(String provider) {

// TODO Auto-generated method stub}

@Overridepublic void onProviderEnabled(String provider) {

// TODO Auto-generated method stub}

@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {

// TODO Auto-generated method stub}

}

GPS:AddLocationManager

Page 145: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

TesttheGPSSimulator

• TotestinEclipse:1. SwitchtoDDMSview.2. FindtheLocationControlsintheEmulator

Controltab.3. ClicktheGPXtabandclickLoadGPX.4. LocateandselecttheGPXfile.5. ClickPlaytobeginsendingcoordinatestothe

Emulator.

Page 146: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

AddabilitytouseGoogleMaps

� UpdatetheManifestwithtwolines.<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.android.GPSSimulator">

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

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

<application android:icon="@drawable/icon" android:label="@string/app_name">

<uses-library android:name="com.google.android.maps" />

<activity android:name=".GPS" android:label="@string/app_name"><intent-filter>

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

</application></manifest>

Page 147: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

AddMapView tomain.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">

<com.google.android.maps.MapViewandroid:id="@+id/mapview1"android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apiKey=“Your API Key Here" />

</LinearLayout>

Page 148: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

GPSSimulator touseGoogleMapspublic class GPSSimulator extends MapActivity { private LocationManager lm;private LocationListener locationListener;private MapView mapView;private MapController mc;

// Called when the activity is first created.@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);

// use the LocationManager class to obtain GPS locationslm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

locationListener = new MyLocationListener();

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

mapView = (MapView) findViewById(R.id.mapview1);mc = mapView.getController();

}

@Overrideprotected boolean isRouteDisplayed() {return false;

}

private class MyLocationListener implements LocationListener {

@Overridepublic void onLocationChanged(Location loc) {

if (loc != null) { Toast.makeText(getBaseContext(), "Location changed : Lat: " + loc.getLatitude() + " Lng: " + loc.getLongitude(), Toast.LENGTH_SHORT).show();

GeoPoint p = new GeoPoint((int) (loc.getLatitude() * 1E6), (int) (loc.getLongitude() * 1E6));mc.animateTo(p);mc.setZoom(16); mapView.invalidate();

}}

@Overridepublic void onProviderDisabled(String provider) {}

@Overridepublic void onProviderEnabled(String provider) {}

@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}

} }

Page 149: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

ViewtheLocationontheMap

Page 150: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

InternetLayers� TheInternet,isbasedonalayered

architecturecalledtheTCP/IPstack.� LinkLayer◦ Protocols:ARPandRARP

� InternetLayer◦ Protocols:IP,ping,etc.

� Transport◦ Protocols:TCPandUDP

� ApplicationLayer◦ Protocols:HTTP,FTP,DNS,etc.

Page 151: Programmation objets, web et mobiles (JAVA) · Middleware AndroidOS(extrait) • View Systemlistes, boutons,… navigateur (WebView) • Resource Manager, accès aux String, aux descriptifs

Client-ServerCommunication

• AservermachineisidentifiedontheInternetbysomeIPaddress

• Daemonsaretheprocessesrunninginthebackgroundwhicharelisteningallthetimeforconnectionrequestsfromclientsonaparticularportnumber.

• Onceaconnectionrequestcomesintotheserveronagivenport,thecorrespondingdaemoncanchoosetoacceptit,andifso,aconnectionisestablished.

• Thentheapplicationlayerprotocolistypicallyusedfortheclienttogetorsenddatatotheserver.