google glass droidcon - droidcon paris 2014

53
1 Quels Frameworks pour quels usages ? Cédric Pointel Mathieu Hausherr

Upload: paris-android-user-group

Post on 30-Nov-2014

147 views

Category:

Technology


0 download

DESCRIPTION

http://fr.droidcon.com/2014/agenda/ http://fr.droidcon.com/2014/agenda/detail?title=Google+Glass%3A+which+framework+depending+for+which+usage Ready to develop your first Google Glass app? I guess that you will be asking yourself the same questions we had : • How to sign in your users without keyboard? • How to scan or detect an object just by looking at it? • How to provide an intuitive and interactive UX? • How to deal with your IT system and share information between users? We will show you which dependencies to add to your build.gradle to satisfy your user's wildest dreams and provide them a full compatible app for connected glasses. You're not ready? Don't panic, our ideas will convince you to buy glasses. And with our code you will discover that a Google Glass app is nothing else but an Android App. Speaker : Mathieu Hausherr, OCTO Technology Mathieu Hausherr is a native mobile app developer at Octo Technology. He develops iOS and Android apps. He believes in mobile development industrialization, unit testing and continuous integration. He loves testing new devices like glasses or watches. Follow him on twitter (@mhausherr) Speaker : Cédric Pointel, OCTO Technology Cédric Pointel is as mobile developer at OCTO Technology since 4 years. He develops mobile apps, mostly on iOS, for bank, insurance, luxury or social media. He also helps companies to improve theirs skills on mobile knowledge, code quality and continuous integration. Interested in robotics and connected objects, he has started testing new devices like Google Glass since the beginning of the year. Follow him on twitter (@cpointel)

TRANSCRIPT

Page 1: Google glass droidcon - DroidCon Paris 2014

1

Quels Frameworks pour quels usages ?Cédric PointelMathieu Hausherr

Page 2: Google glass droidcon - DroidCon Paris 2014

2

DEVELOPPEUR

MOBILE

iOSAndroidBlackberry Bada Windows Phone7

Te c h Lead

Mathieu [email protected]@mhausherr

Page 3: Google glass droidcon - DroidCon Paris 2014

3

DEVELOPPEUR

MOBILE

iOSAndroidRobotique

Te c h Lead

Cédric [email protected]@cpointel

Page 4: Google glass droidcon - DroidCon Paris 2014

5

Des frameworks selon les usages

Comment développer sur les Google Glass ?

Les Google Glass et ses contraintes

Page 5: Google glass droidcon - DroidCon Paris 2014

6

Historique

2011

Lancem

ent du p

roje

t au se

in d

u Google

X

Lab

avril2012

Première apparition à la

“Foundatio

n Fightin

g Blindness

mai201

2

Présentatio

n officielle

lors

d’un show té

lévisé

juin201

2

Démonst

ratio

n à la

Google

I/O

février2013

Google recru

te des teste

urs

avril2013

Mirror A

PI disp

onible

mai2013

Premières applic

ations (

Face

book, Tw

itter,

CNN,

Evernote, …

.)

novembre

2013

Google a

nnonce le

GDK

avril2014

Vente sur u

ne journ

ée

mai2014

Open beta

Page 6: Google glass droidcon - DroidCon Paris 2014

7

Batterie5/6 hours

PrismeResolution: 640x360

CapturePhoto : 5mpx Video : 720p

Microphone

TouchpadTap one/two fingersSwipe one/two fingers

TransducteurBone conduction

Electronique16 GB 1,2 GHz1GB RAM Wifi / Bluetooth

Un petit bijou technologique …

Page 7: Google glass droidcon - DroidCon Paris 2014

8

Prendre des photos

Enregistrer des vidéos

Rechercher sur Google

Jouer de la musique

Envoyer des messages

Effectuer des appels

Utiliser la navigation

Recevoir des notifications

Prendre des notes

… ayant les mêmes fonctionnalités qu’un smartphone …

Page 8: Google glass droidcon - DroidCon Paris 2014

9

… et des interactions équivalentes …

Par la voix« Ok, glass » + commande

Par le trackpadAvec différentes Gestures (taps, swipes, one finger, two fingers)

Par des boutons physiquesPour prendre un photo ou enregistrer une vidéo

Pour allumer/éteindre les Google Glass

Avec son corps (tête, yeux, …)La détection de mouvement (grâce aux capteurs, accéléromètre, gyroscope, …)

Le clin d’oeil droit

Les applications “My Glass”Sur smartphone (iOS / Android)

Sur le web (https://glass.google.com/u/0/myglass)

Page 9: Google glass droidcon - DroidCon Paris 2014

10

… possédant un petit écran …

Page 10: Google glass droidcon - DroidCon Paris 2014

11

… ainsi qu’une batterie limitée

Page 11: Google glass droidcon - DroidCon Paris 2014

12

Des frameworks selon les usages

Les Google Glass et ses contraintes

Comment développer sur les Google Glass ?

Page 12: Google glass droidcon - DroidCon Paris 2014

13

1. La Mirror API

2. La Glass Developpement Kit

Deux options pour vos apps

Page 13: Google glass droidcon - DroidCon Paris 2014

14

Le code tourne sur le serveurRESTFull

Authentification avec OAuth2.0

Librairies en Java, PHP, .NET, Ruby, Python …

Mirror API

Your service

SyncHTTP (REST)

Page 14: Google glass droidcon - DroidCon Paris 2014

15

1. La Mirror API

2. La Glass Developpement Kit

Deux options pour vos apps

Page 15: Google glass droidcon - DroidCon Paris 2014

16

Glass Development Kit

Page 16: Google glass droidcon - DroidCon Paris 2014

17

Le code Android classique fonctionne sur les GlassLe GDK est en version Preview

Il est disponible directement dans le SDK manager

Il ajoute des fonctionnalités dédiéesLa gestion de la voie

La gestion des gestes du corps

Un nouveau type d’interface: les Cards

Glass Development Kit

Page 17: Google glass droidcon - DroidCon Paris 2014

18

Vous pouvez utiliser les deux !

Une notification (Card) poussée avec la Mirror API peut lancer une application native (GDK)

Mirror API ou GDK ?

Page 18: Google glass droidcon - DroidCon Paris 2014

19

Les Google Glass et ses contraintes

Des frameworks selon les usages

Comment développer sur les Google Glass ?

Page 19: Google glass droidcon - DroidCon Paris 2014

20

Comment gérer la voix ?

Comment afficher de l’information à l’utilisateur ?

Comment s’authentifier ?

Comment scanner ou reconnaître des objets ?

Comment proposer une navigation intuitive ?

Comment échanger avec votre SI et partager du contenu avec d’autres utilisateurs ?

Page 20: Google glass droidcon - DroidCon Paris 2014

21

Comment gérer la voix ?

Page 21: Google glass droidcon - DroidCon Paris 2014

22

SituationsLancer une application

Transmettre de l’information à une application

Interagir avec l’application

Effectuer une recherche

Exemple : Effectuer un virement ou rechercher une information

ContraintesLes commandes sont « imposées »

Selon l’usage une connexion réseau est nécessaire

Comment gérer la voix ?

Page 22: Google glass droidcon - DroidCon Paris 2014

23

Solution : le GDK de base permet de gérer la voix de 3 façons différentes

Les commandes vocale via l’écran d’accueil afin de lancer directement un Glassware depuis l’écran d’accueil

Les commandes vocale contextuelles afin de lancer les items d’un menu directement par la voix

La reconnaissance vocale afin de transmettre ce que l’utilisateur dit au sein de son activité

Comment gérer la voix ?

Page 23: Google glass droidcon - DroidCon Paris 2014

24

Les commandes vocale via l’écran d’accueil afin de lancer directement un Glassware depuis l’écran d’accueil

Une ressource XML pour la commande vocale selon une liste définie par Google ( VoiceTriggers.Command)

Comment gérer la voix ?

res/xml/voice_trigger.xml

<?xml version="1.0" encoding="utf-8"?><trigger keyword="SEND_MONEY" />

"SEND_MONEY""FIND_A_PLACE""FIND_A_HOSPITAL""FIND_PARKING""SHOW_ME_MY_SPEED""SHOW_ME_THE_NEWS""SHOW_ME_THE_WEATHER"

"START_A_RUN""START_A_STOPWATCH""START_A_TIMER""TAKE_A_PICTURE""TAKE_A_NOTE""TRANSLATE_THIS""PLAY_A_GAME"

Exemple de commandes :

Page 24: Google glass droidcon - DroidCon Paris 2014

25

Les commandes vocale via l’écran d’accueil afin de lancer directement un Glassware depuis l’écran d’accueil

Déclarer un Intent Filter au sein du Manifest de l’application avec également la possibilité de fournir un icône à la commande vocale

Comment gérer la voix ?

<activity android:name=".ui.activity.MainActivity" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:keepScreenOn="true" android:immersive="true"> <intent-filter> <action android:name="com.google.android.glass.action.VOICE_TRIGGER" /> </intent-filter>

<meta-data android:name="com.google.android.glass.VoiceTrigger" android:resource="@xml/voice_trigger" /> </activity>

Page 25: Google glass droidcon - DroidCon Paris 2014

26

Les commandes vocale via l’écran d’accueil afin de lancer directement un Glassware depuis l’écran d’accueil

Possibilité d’ajouter un prompt afin d’offrir la possibilité à l’utilisateur d’ajouter un message supplémentaire

Il est également possible de restreindre l’utilisation de la voix selon la disponibilité de certains services au sein des Google Glass (ex : camera, réseau, …)

Comment gérer la voix ?

<?xml version="1.0" encoding="utf-8"?><trigger keyword="SEND_MONEY"> <input prompt="@string/how_much_prompt" /></trigger>

ArrayList<String> voiceResults = getIntent().getExtras().getStringArrayList(RecognizerIntent.EXTRA_RESULTS);

Page 26: Google glass droidcon - DroidCon Paris 2014

27

Comment afficher l’information à l’utilisateur ?

Page 27: Google glass droidcon - DroidCon Paris 2014

28

SituationsAfficher de l’information

Rafraichir dynamiquement du contenu

Offrir la possibilité d’interagir avec le contenu (afficher plus de détail, le partager, …)

Exemple : lors d’un événement ou la visite d’un musée

ContraintesRespecter les guidelines Google

L’information doit être simple et pertinente

Comment afficher de l’information à l’utilisateur ?

Page 28: Google glass droidcon - DroidCon Paris 2014

29

La timeline

Une vision globale divisée en 4 partiesLe passé

Le future / présent

Les applications appelées « Glasswares »

Les paramètres pour configurer les Google Glass (WIFI, Bluetooth, …)

Home

Page 29: Google glass droidcon - DroidCon Paris 2014

30

3 types de carte

Live cards

Static cards

Immersion

Solution : le GDK de base fournit des types d’écran à utiliser afin d’afficher de l’information

Page 30: Google glass droidcon - DroidCon Paris 2014

31

Les StaticCards

Static cards

De simple vue

Pour afficher du texte, des images, des vidéos ou du HTML

Utilisé pour afficher des notifications ( Mirror API)

Possibilité d’y invoquer des LiveCards ou de l’Immersion

Ne peut pas être rafraichie fréquemment

Page 31: Google glass droidcon - DroidCon Paris 2014

32

Les LiveCards

Live cards

Information Temps-réel

Accès à certaines capacités des Google Glass (ex : accéléromètre, gyroscope, camera, …)

S’exécute au sein de la timeline

Peut être mis à jour fréquemmentLow Frequency Livecards (de l’ordre de la seconde)

High Frequency Livecards

Page 32: Google glass droidcon - DroidCon Paris 2014

33

Les Immersions

Immersion

S’exécute en dehors de la TimeLine

Développer votre propre interface ( Activity Android)

Accès à l’ensemble des capacités des Google Glass (ex : les capteurs, la voix, les gestures, …)

Attention à respecter les contraintes Google (taille de l’écran, les interactions, gestures)

Spécifier dans le Manifest android:immersive="true" pour éviter que les Glass se mettent en veille

Page 33: Google glass droidcon - DroidCon Paris 2014

34

Désormais une classe magique : CardBuilder elle permet de générer un layout selon différent styles intégrés au GDK

Gérer l’interface selon le besoin

View view = new CardBuilder(context, CardBuilder.Layout.COLUMNS) .setText(”Bonjour, bienvenue à la Droidcon Paris") .setFootnote(”Session Google Glass à 15h55") .addImage(R.drawable.image) .getView();

.Layout.CAPTION .Layout.TITLE .Layout.ALERT

.Layout.ALERT.Layout.AUTHOR .Layout.COLUMN

Page 34: Google glass droidcon - DroidCon Paris 2014

35

Comment s’authentifier ?

Page 35: Google glass droidcon - DroidCon Paris 2014

36

SituationsRéseau social

Banque

Assurance

Exemple : afficher le solde de mon compte

ContraintesPas de claviers sur les Glass

Dicter un mot de passe n’est pas sécurisé

Comment s’authentifier ?

Page 36: Google glass droidcon - DroidCon Paris 2014

37

Solution n°1 : Utiliser les APIs du GDK au moment de l’installation d’un Glassware

Comment s’authentifier ?

Page 37: Google glass droidcon - DroidCon Paris 2014

38

Solution n°2 : Utiliser un QRCode

Depuis le site web ou le smartphone

Contient un token de connexion unique

Zbar

Comment s’authentifier ?

compile files('libs/zbar.jar’)

imageScanner = new ImageScanner(); imageScanner.setConfig(0, Config.X_DENSITY, 3); imageScanner.setConfig(0, Config.Y_DENSITY, 3); int[] symbols = getIntent().getIntArrayExtra(SCAN_MODES); if (symbols != null) { imageScanner.setConfig(Symbol.NONE, Config.ENABLE, 0); for (int symbol : symbols) { imageScanner.setConfig(symbol, Config.ENABLE, 1); } }

Page 38: Google glass droidcon - DroidCon Paris 2014

39

Comment scanner ou reconnaître un objet ?

Page 39: Google glass droidcon - DroidCon Paris 2014

40

SituationsG-Commerce

Evènementiel

Logistique

Intervention sur le terrain

Exemple : détecter une bouteille de vin

ContraintesPerformances

Détection en local

Comment scanner ou reconnaître un objet ?

Page 40: Google glass droidcon - DroidCon Paris 2014

41

Solution n°1 : Ajouter un QRCode / Utiliser un code barreZbar

Comment scanner ou reconnaître un objet ?

compile files('libs/zbar.jar')

cameraPreview = (CameraPreview) findViewById(R.id.camerapreview); cameraPreview.setAutoFocusCallback(new Camera.AutoFocusCallback() { public void onAutoFocus(boolean success, Camera camera) { autoFocusHandler.postDelayed(doAutoFocus, 1000); } }); cameraPreview.setPreviewCallback(this);

public void onPreviewFrame(byte[] data, Camera camera) { int result = imageScanner.scanImage(barcode); }

Page 41: Google glass droidcon - DroidCon Paris 2014

42

Solution n°2 : Détection de formeOpenCV

Limites : pas de résultats simplement actionnables

Comment scanner ou reconnaître un objet ?

Page 42: Google glass droidcon - DroidCon Paris 2014

43

Comment proposer une navigation intuitive et dynamique ?

Page 43: Google glass droidcon - DroidCon Paris 2014

44

SituationsSalon / Soirée démonstration

Utilisateur privilégié / jeu concours

Exemple : rendre une navigation fluide lors de l’affichage de contenu

ContraintesL’utilisateur est face à un terminal qu’il connaît mal

Google propose déjà des guidelines

Comment proposer une navigation intuitive et dynamique ?

Page 44: Google glass droidcon - DroidCon Paris 2014

45

Solution n°1 : En mimant l’interface GoogleListe de sélection

Comment proposer une navigation intuitive et dynamique ?

sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);

Page 45: Google glass droidcon - DroidCon Paris 2014

46

Solution n°2 : Avec les mouvement du corps

Comment proposer une navigation intuitive et dynamique ?

sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);

TYPE_ROTATION_VECTORTYPE_ACCELEROMETERTYPE_GYROSCOPE

TYPE_LINEAR_ACCELERATIONTYPE_GRAVITYTYPE_MAGNETIC_FIELD

Exemples :

Page 46: Google glass droidcon - DroidCon Paris 2014

47

Solution n°3 : En utilisant la caméra

OnTheGo Platforms : https://www.otgplatforms.com/

Comment proposer une navigation intuitive et dynamique ?

Page 47: Google glass droidcon - DroidCon Paris 2014

48

Comment échanger avec votre SI et partager du contenu avec d’autres utilisateurs ?

Page 48: Google glass droidcon - DroidCon Paris 2014

49

SituationsRéseaux sociaux

Assistance à distance

Assurance

Exemple : afficher ce que je vois à un conseiller clientèle

ContraintesInternet partagé avec le téléphone

Capacité du processeur

Comment échanger avec votre SI et partager du contenu avec d’autres utilisateurs ?

Page 49: Google glass droidcon - DroidCon Paris 2014

50

Solution n°1 : Via des APIs

Utilisez votre librairie réseau préférée!

Comment échanger avec votre SI et partager du contenu avec d’autres utilisateurs ?

compile 'com.mcxiaoke.volley:library:1.0.4@aar’compile 'com.octo.android.robospice:robospice:1.4.14’compile 'com.squareup.retrofit:retrofit:1.6.1’

Page 50: Google glass droidcon - DroidCon Paris 2014

51

Solution n°2 : En vidéo

En utilisant la solution de QuickBlox

Comment échanger avec votre SI et partager du contenu avec d’autres utilisateurs ?

Page 51: Google glass droidcon - DroidCon Paris 2014

52

Solution n°2 : En vidéo

En utilisant la solution de QuickBlox

Comment échanger avec votre SI et partager du contenu avec d’autres utilisateurs ?

public Camera getCamera() { try { Field privateCameraField = com.quickblox.module.videochat.views.CameraView.class.getDeclaredField("camera"); privateCameraField.setAccessible(true); return (Camera) privateCameraField.get(this); } catch (NoSuchFieldException e) { return null; } catch (IllegalAccessException e) { return null; } }

Page 52: Google glass droidcon - DroidCon Paris 2014

53

Conclusion

Page 53: Google glass droidcon - DroidCon Paris 2014

54

Disponible dès demain sur :

Merci de votre attention.Questions ?

Mathieu [email protected] @mhausherr

Cédric [email protected]@cpointel