Programmation de composant mobiles aka Android



Documents pareils
Développement tablette Android. SophiaConf2011 Par Arnaud FARINE

Projet Android (LI260) Cours 2

Gestion des différentes tailles d écran

Chapitre 1 Retour en arrière

Paris Airports - Web API Airports Path finding

Android et le Cloud Computing

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

DÉVELOPPEMENT ANDROID

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Education Delivery Intelligent Tool

TP SIN Programmation sur androïde Support : eclipse

Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction

Projet de programmation (IK3) : TP n 1 Correction

OpenPaaS Le réseau social d'entreprise

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Corrigé des exercices sur les références

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Trixbox: Asterisk packagé. Unité Réseaux du CNRS

Supervision et infrastructure - Accès aux applications JAVA. Document FAQ. Page: 1 / 9 Dernière mise à jour: 15/04/12 16:14

Sécurité des applications Android constructeurs et construction de backdoors ciblées

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

VoD ( Video on Demand ) avec VLC

SOMMAIRE

Machine virtuelle Java pour Palm TX

1. Base de données SQLite

La Voix sur IP. Études des solutions logicielles. Open Source

Les fondamentaux du développement d applications Java

Tutorial pour une application simple

TD/TP 1 Introduction au SDK d Android

Tutoriel Android - TP de prise en main

Documentation support technique

Composants Logiciels. Le modèle de composant de CORBA. Plan

Guide de mise en service - THOMSON ST2030

Cartographie et audit du réseau GSM avec des outils Open Source

Androïd Manuel d installation MB PRO LIGHT Préalable. Définitions

TP au menu «UI ANDROID»

Développement Android. J.-F. Couchot

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

as Architecture des Systèmes d Information

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Sécurité Informatique. Description. Prérequis. Un petit test avant de commencer s embourber

Desktop Intégration. Rémi Forax

Programmer en JAVA. par Tama

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

7 Développement d une application de MapReduce

2X ThinClientServer Guide d utilisation

INSTALLATION ET CONFIGURATION DE OPENLDAP

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Réalisation de SMSMail

Auto-évaluation Programmation en Java

Warren PAULUS. Android SDK et Android x86

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Guide d'installation rapide TFM-560X YO.13

Introduction ANDROID

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Rootkit pour Windows Mobile 6

Remote Method Invocation Les classes implémentant Serializable

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Introduction au langage C

Création d une application Android (APPInventor)

Configuration d'un trunk SIP OpenIP sur un IPBX ShoreTel

France SMS+ MT Premium Description

HAUTE DISPONIBILITÉ DE MACHINE VIRTUELLE AVEC HYPER-V 2012 R2 PARTIE CONFIGURATION OPENVPN SUR PFSENSE

Applet pour visualiser les variables «automate» notifiées

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Construire une application marketing Facebook sur la plateforme Windows Azure

EGGACOM. Manuel d'utilisation (version beta) Nano et Master VoIP 1.0

Package Java.util Classe générique

«Cachez-moi cette page!»

Épisode 2 : Les outils de développement Alain Menu édition 2.1, septembre 2013

Android. Android is an environment where the biggest limitation is your imagination. P1 1

Imprimantes et partage réseau sous Samba avec authentification Active Directory

PUPPET. Romain Bélorgey IR3 Ingénieurs 2000

VTP. LAN Switching and Wireless Chapitre 4

Android. Programmation. De la conception au déploiement avec le SDK Google Android 2. Damien Guignard Julien Chable Emmanuel Robles

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Calcul Parallèle. Cours 5 - JAVA RMI

Ingénierie des Modèles. Méta-modélisation

WDpStats Procédure d installation

Manuel de l utilisateur. Soft-phone - Client VoIP 3CX Version 6.0

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

TD3: tableaux avancées, première classe et chaînes

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Paginer les données côté serveur, mettre en cache côté client

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

FRITZ!Box Fon WLAN 7270

Alfstore workflow framework Spécification technique

Paxton. ins Net2 desktop reader USB

Android 4 Les fondamentaux du développement d'applications Java

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Become unique Stay unique Start today

Accéder à PostgreSQL par JDBC via un tunnel SSL Java

Transcription:

Programmation de composant mobiles aka Android Wies law Zielonka December 10, 2015

La taille et densité de l écran

Taille et densité Les tailles de l écran : small normal large xlarge Les densités : low(ldpi) medium(mdpi) high(hdpi) extra high(xhdpi) extra-extra-high (xxhdpi) extra-extra-extra-high (xxxhdpi) L orientation (landscape ou portrait) de l écran est considérée comme une variation de la taille de l écran.

Placer layouts pour les tailles différentes dans les répertoires différents : par exemple res/layout-taille res/layout-large res/layout sans suffixe contient les fichiers layout utilisés par défaut. Exemples: Le répertoire res/layout-land contient un layout pour l écran orienté dans le sens landscape. Le répertoire res/layout-port contient un layout pour l écran orienté dans le sens portrait. res/layout-sw600dp - smallestwidth - la taille minimale de l écran (peu importe si 600 est perceptible comme largeur ou hauteur).

Exemples de configurations 320dp téléphone, 600dp tablette taille 7, 720dp tablette taille 10. res/layout/main_activity.xml res/layout-sw600dp/main_activity.xml le premier fichier layout pour un téléphone, le deuxième pour une tablette. res/layout-xlarge-land/my_layout.xml //extra-large landsca res/layout/my_layout.xml //par defaut res/layout-large/my_layout.xml //large screen res/layout-xlarge/my_layout.xml //extra-large screen

Alias de fichiers layout Si le même layout utilisé pour les différentes configurations on peut utiliser un alias. 1 <?xml version= 1.0 encoding= utf 8?> 2 <merge> 3 <include lyout= @layout/main ltr. xml /> 4 </ merge> N oubliez pas de faire un layout par défaut.

Les fichiers bitmap Les fichiers bitmap doivent être adaptés à la taille de l écran. Générer la ressource en format vecteur et ensuite les bitmaps pour chaque densité avec l échelle correspondante : xhdpi 2.0 hdpi 1.5 mdpi 1.0 ldpi 0.75 Placer ces fichiers dans les répertoires ressources appropriés : res/drawable-xhdpi res/drawable-hdpi res/drawable-mdpi res/drawable-ldpi

Trouver la configuration Si on a une référence vers la classe Context : 1 Configuration configuration = 2 context. getresources (). getconfiguration (); Les attributs de Configuration : qui prend les valeurs : In Activity : orientation Configuration.ORIENTATION LANDSCAPE Configuration.ORIENTATION PORTRAIT 1 if ( configuration. orientation 2 == Configuration.ORIENTATION LANDSCAPE) { 3 }else{ //PORTRAIT 4 5 }

int screenlayout 1 switch( configuration. screenlyout & 2 Configuration.SCREENLAYOUT SIZE MASK){ 3 case Configuration.SCREENLAYOUT SIZE SMALL : 4 5 case Configuration.SCREENLAYOUT SIZE NORMAL : 6 7 case Configuration.SCREENLAYOUT SIZE LARGE : 8 10 9 case Configuration.SCREENLAYOUT SIZE XLARGE : 11 case Configuration.SCREENLAYOUT SIZE UNDEFINED : 12 13 }

Configuration D autres attributs de Configuration : int densitydpi int screenheightdp int screenwidthtdp

Détecter le changement de la configuration Si nous voulons que notre programme détecte le changement de la configuration (par exemple le changement d orientation) pour une activité donnée if faut spécifier les changement traité dans le code java dans le manifeste : 1 <activity android:name=. MyActivity 2 android:configchanges= 3 orientation screensize keyboardhidden 4 android:name= @string /app name /> Si la configuration (orientation/keyboard/screensize) changent l activité reçoit l appel à la méthode 1 void onconfigurationchanged( Configuration conf) où le paramètre conf est la nouvelle configuration. (A partir de Android 3.2 si l orientation change screensize change aussi).

Téléphonie

Téléphone exigé Si l application n est peut pas être utilisée sans téléphone alors indiquer que le téléphone est nécessaire dans AndroidManifest : 1 <uses feature android:name= android. hardware. telephony 2 android:required= true />

Vérification si le matériel téléphonique accessible 1 PackageManager pm = getpack ageman ager(); 2 boolean telephonysupported = 3 pm. hassystemfeature (PackageManager.FEATURE TELEPHONY);

Initier l appel téléphonique 1 Intent who = new Intent ( Intent.ACTION DIAL, 2 Uri. parse( tel :555 2368 )); 3 startactivity (who); démarre l activité qui permet d initier l appel. L utilisateur peut changer encore le numéro appelé (l appel ne démarre pas encore). Aucune permission nécessaire.

Lancer directement l appel téléphonique 1 Intent who = new Intent ( Intent.ACTION CALL, 2 Uri. parse( tel :555 2368 )); 3 startactivity (who); demarre directement l appel téléphonique. Permission nécessaire : 1 <uses permission 2 android:name= android. permission.call PHONE />

Accéder aux propriétés du téléphone et son état Récupérer telephonymanager : 1 TelephonyManager tm = 2 (TelephonyManager ) getsystemservice( 3 Context.TELEPHONY SERVICE);

Lire les détails de l appareil 1 String phonetypestr = unknown ; 2 int phonetype = telephonymanager. getphonetype (); 3 switch (phonetype) { 4 case (TelephonyManager.PHONE TYPE CDMA): 5 phonetypestr = CDMA ; 6 break ; 7 case (TelephonyManager.PHONE TYPE GSM) : 8 phonetypestr = GSM ; 9 break ; 10 case (TelephonyManager.PHONE TYPE SIP): 11 phonetypestr = SIP ; 12 break ; 13 case (TelephonyManager.PHONE TYPE NONE): 14 phonetypestr = None ; 15 break ; 16 default : break ; 17 }

Lire les détails de l appareil suite 1 // These require READ PHONE STATE uses permission 2 3 // Read the IMEI for GSM or MEID for CDMA 4 String deviceid = telephonymanager. getdeviceid (); 5 6 // Read the software version on the phone 7 // (note not the SDK version ) 8 String softwareversion = telephonymanager 9. getdevicesoftwareversion (); 10 11 // Get the phone s number ( if available ) 12 String phonenumber = telephonymanager 13. getline1number (); Sauf pour le type du téléphone il faut la permission : 1 <uses permission 2 android:name= android. permission.read PHONE STATE />

Les détails du réseau Quand l appareil connecté au réseau en utilisant TelephonyManager on peut lire : Mobile Country Code (MC), Mobile Network Code (MNC), le code ISO du pays, le nom du opérateur : 1 // Get connected network country ISO code 2 String networkcountry = telephonymanager 3. getnetworkcountryiso (); 4 // Get the connected network operator ID (MCC + MNC) 5 String networkoperatorid = telephonymanager 6. getnetworkoperator (); 7 // Get the connected network operator name 8 String networkname = telephonymanager 9. getnetworkoperatorname ();

Lire des détails de la carte SIM 1 int simstate = telephonymanager. getsimstate (); 2 switch (simstate ) { 3 case (TelephonyManager.SIM STATE ABSENT): break ; 4 case (TelephonyManager.SIM STATE NETWORK LOCKED): break ; 5 case (TelephonyManager.SIM STATE PIN REQUIRED): break ; 6 case (TelephonyManager.SIM STATE PUK REQUIRED): break ; 7 case (TelephonyManager.SIM STATE UNKNOWN): break ;

Lire des détails de la carte SIM (suite) 1 case (TelephonyManager.SIM STATE READY): { 2 // Get the SIM country ISO code 3 String simcountry = telephonymanager. getsimcountryiso (); 4 // Get the operator code of the active SIM (MCC + MNC) 5 String simoperatorcode = telephonymanager 6. getsimoperator (); 7 // Get the name of the SIM operator 8 String simoperatorname = telephonymanager 9. getsimoperatorname (); 10 // Requires READ PHONE STATE uses permission 11 // Get the SIM s serial number 12 String simserial = telephonymanager 13. getsimserialnumber (); 14 break ; 15 } 16 default : break ; 17 }

Surveiller les changements de l état du téléphone Permission READ PHONE STATE. Créer PhoneStateListener et enregistrer avec TelephonyManager en indiquant les évènements à surveiller. 1 telephonymanager. listen ( phonestatelistener, 2 PhoneStateListener.LISTEN CALL FORWARDING INDICATOR 3 PhoneStateListener.LISTEN CALL STATE 4 PhoneStateListener.LISTEN CELL LOCATION 5 PhoneStateListener.LISTEN DATA ACTIVITY 6 PhoneStateListener.LISTEN DATA CONNECTION STATE 7 PhoneStateListener.LISTEN MESSAGE WAITING INDICATOR 8 PhoneStateListener.LISTEN SERVICE STATE 9 PhoneStateListener.LISTEN SIGNAL STRENGTHS);

Supprimer le listener 1 telephonymanager. listen ( phonestatelistener, 2 PhoneStateListener.LISTEN NONE);

Surveiller les appels entrants Implémenter la méthode oncallstatechanged du PhoneStateListener : 1 PhoneStateListener callstatelistener = 2 new PhoneStateListener () { 3 public void oncallstatechanged( int state, 4 String numeroappelant) { 5 String callstatestr = Unknown ; 6 switch ( state ) { 7 case TelephonyManager.CALL STATE IDLE : 8 callstatestr = idle ; break ; 9 case TelephonyManager.CALL STATE OFFHOOK : 10 callstatestr = offhook ; break ; 11 case TelephonyManager.CALL STATE RINGING : 12 callstatestr = ringing. Incoming number is : 13 + incomingnumber; 14 break ; 15 default : break ; 16 } 17 Toast.makeText(MyActivity. this, 18 callstatestr, Toast.LENGTH LONG). show (); 19 }

Surveiller les appels entrants (suite) 1 telephonymanager. listen ( callstatelistener, 2 PhoneStateListener.LISTEN CALL STATE);

Le paramètre state une de constante de TelephonyManager : CALL_STATE_IDLE en repos, CALL_STATE_RINGING sonne, CALL_STATE_OFFHOOK en appel. L application doit être active pour intercepter les appels. (Sinon il faudra créer Intent Receiver.)

Utiliser IntentReceiver pour surveiller les appels entrants Si l état du téléphone change (appel entre, est accepté, terminé) TelephonyManager diffuse un intent ACTION_PHONE_STATE_CHANGED Enregistrer le receiver dans AndroidManifest : 1 <receiver android:name= PhoneStateChangedReceiver > 2 <intent filter> 3 <action android:name= 4 android. intent. action.phone STATE /> 5 </intent filter> 6 </receiver>

Utiliser IntentReceiver suite Intent diffusé contient deux extras : TelephonyManager.EXTRA_STATE avec une des valeurs TelephonyManager.CALL_STATE_* TelephonyManager.EXTRA_INCOMING_NUMBER dont la valeur est le numéro appelant (seulement si l état CALL_STATE_RINGING).

IntentReceiver exemple 1 public class PhoneStateChangedReceiver extends 2 BroadcastReceiver { 3 @Override 4 public void onreceive(context context, Intent intent ) { 5 String phonestate = intent 6. getstringextra (TelephonyManager 7.EXTRA STATE); 8 if (phonestate. equals (TelephonyManager 9.EXTRA STATE RINGING)) { 10 String phonenumber = intent 11. getstringextra (TelephonyManager 12.EXTRA INCOMING NUMBER); 13 Toast.makeText(context, 14 Incoming Call From: + phonenumber, 15 Toast.LENGTH LONG).show (); 16 } 17 } 18 }