Android : Services de téléphonie Frédéric Lemoine Conservatoire National des Arts et Métiers Lemoine Frédéric Tous droits réservés 1
TelephonyManager telephonymanager= (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); <uses-permission android:name="android.permission.read_phone_state"> </uses-permission> Information int getphonetype() String getdeviceid() String getdevicesoftwareversion() String getline1number() boolean hasicccard() Commentaire Type de téléphone (voir plus loin) L'identifiant unique du téléphone (IMEI) Le numéro de la version du logiciel utilisé Le numéro de téléphone de l'abonné Retourne vrai si l'appareil contient une carte SIM (Integrated Circuit Card) Lemoine Frédéric Tous droits réservés 2
String getnetworkoperatorname() String getnetworkoperator() Nom de l'opérateur de téléphonie Identifiant de l'opérateur de téléphonie String getnetworkcountryiso() Code ISO du pays de l'opérateur (fr, de...) int getnetworktype() String getsimcountryiso() String getsimoperatorname() String getsimoperator() String getsimserialnumber() int getsimstate() Type de la technologie radio employée (GPRS, EDGE, UMTS (3G)...). Code ISO du pays du fabriquant de la carte SIM (fr, de...) Le nom de l'opérateur de l'abonné (carte SIM) Identifiant de l'opérateur de l'abonné (carte SIM) Numéro de série de la carte SIM. Etat de la carte SIM (voir plus loin) Lemoine Frédéric Tous droits réservés 3
String getsubscriberid() String getvoicemailalphatag() String getvoicemailnumber() boolean isnetworkroaming() int getdataactivity() int getdatastate() int getcallstate() Identifiant de l'abonné Nom donné pour la messagerie. Habituellement: "Messagerie vocale". Numéro de la messagerie vocale. Vrai si l'appareil est en mode d'itinérance sur le réseau. Type de la connexion pour les données (voir plus loin) Etat de la connexion pour les données (voir plus loin) Etat de l'appel (voir plus loin) Lemoine Frédéric Tous droits réservés 4
int phonetype=telephonymanager.getphonetype(); Type TelephonyManager.PHONE_TYPE_NONE TelephonyManager.PHONE_TYPE_GSM TelephonyManager.PHONE_TYPE_CDMA TelephonyManager.PHONE_TYPE_SIP Commentaire Pas d'appels vocaux Norme la plus connue pour la téléphonie mobile (Global System for Mobile Communications). Système de codage des transmissions, utilisant la technique d'étalement de spectre (Code Division Multiple Access) Session Initiation Protocol: Téléphonie par internet (Voice over IP: VoIP) Lemoine Frédéric Tous droits réservés 5
int simstate=telephonymanager.getsimstate(); Etat de la carte SIM TelephonyManager.SIM_STATE_UNKNOWN TelephonyManager.SIM_STATE_ABSENT TelephonyManager. SIM_STATE_PIN_REQUIRED Commentaire Inconnu ou en cours de basculement entre 2 états. Aucune carte SIM n'est présente dans l'appareil. La carte SIM est verrouillée et réclame le code personnel de l'abonné (Personnal Identification Number). TelephonyManager. SIM_STATE_PUK_REQUIRED TelephonyManager. SIM_STATE_NETWORK_LOCKED TelephonyManager.SIM_STATE_READY La carte SIM est bloquée et réclame le code de déblocage (PIN Unlock Key). La carte SIM est verrouillée et réclame le code de déverrouillage. La carte SIM est prête et fonctionne. Lemoine Frédéric Tous droits réservés 6
int dataactivity=telephonymanager.getdataactivity(); Type de connexion TelephonyManager.DATA_ACTIVITY_NONE TelephonyManager.DATA_ACTIVITY_IN TelephonyManager.DATA_ACTIVITY_OUT TelephonyManager.DATA_ACTIVITY_INOUT TelephonyManager.DATA_ACTIVITY_DORMANT Commentaire Aucun trafic Données en réception Données en émission Données à la fois en réception et en émission Connexion active mais le lien a été rompu. Lemoine Frédéric Tous droits réservés 7
int datastate=telephonymanager.getdatastate(); Etat de la connexion TelephonyManager.DATA_DISCONNECTED TelephonyManager.DATA_CONNECTING TelephonyManager.DATA_CONNECTED TelephonyManager.DATA_SUSPENDED Commentaire Déconnecté En cours de connexion Connecté Connexion active mais pas de transmission. La transmission est suspendue du fait de la réception d'un appel par exemple. Lemoine Frédéric Tous droits réservés 8
int callstate=telephonymanager.getcallstate(); Etat de l'appel TelephonyManager.CALL_STATE_IDLE TelephonyManager.CALL_STATE_OFFHOOK TelephonyManager.CALL_STATE_RINGING Commentaire Aucun appel. Un appel est en cours de traitement. L'utilisateur a décroché. Un appel arrive. Le téléphone sonne. Lemoine Frédéric Tous droits réservés 9
Changement d'état du téléphone Changement d'état du téléphone PhoneStateListener. LISTEN_CALL_FORWARDING_INDICATOR PhoneStateListener.LISTEN_CALL_STATE PhoneStateListener.LISTEN_CELL_LOCATION PhoneStateListener.LISTEN_DATA_ACTIVITY PhoneStateListener. LISTEN_DATA_CONNECTION_STATE PhoneStateListener. LISTEN_MESSAGE_WAITING_INDICATOR PhoneStateListener. LISTEN_SIGNAL_STRENGTHS Commentaire L'indicateur de renvoi d'appel a changé d'état. Etat de l'appel (voir précédemment) Changement de cellule Changement dans la direction du trafic de données (voir précédemment) Changement d'état de connexion (voir précédemment) L'indicateur de dépôt d'un message vocal sur la messagerie a changé d'état. Force du signal reçu. Lemoine Frédéric Tous droits réservés 10
Affichage des informations sur les services de téléphonie Lemoine Frédéric Tous droits réservés 11
Changement d'état du téléphone PhoneStateListener psl=new PhoneStateListener() { @Override public void onsignalstrengthschanged(signalstrength signalstrength) { super.onsignalstrengthschanged(signalstrength); // Modification du niveau de signal int strength=signalstrength.getgsmsignalstrength(); } }; Lemoine Frédéric Tous droits réservés 12
Changement d'état du téléphone public void listen (PhoneStateListener listener, int events) @Override protected void onresume() { telephonymanager.listen(psl, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); } @Override protected void onpause() { super.onpause(); telephonymanager.listen(psl, PhoneStateListener.LISTEN_NONE); } Lemoine Frédéric Tous droits réservés 13
Changement d'état du téléphone Application affichant le niveau du signal reçu: Lemoine Frédéric Tous droits réservés 14
Gestionnaire de connexion ConnectivityManager connectivitymanager= (ConnectivityManager) getsystemservice(context.connectivity_service); Lemoine Frédéric Tous droits réservés 15
Gestionnaire de connexion Méthodes de la classe ConnectivityManager Méthode NetworkInfo getactivenetworkinfo() NetworkInfo[] getallnetworkinfo() NetworkInfo getnetworkinfo(int networktype) static boolean isnetworktypevalid(int networktype) int getnetworkpreference() void setnetworkpreference(int preference) boolean requestroutetohost(int networktype, int hostaddress) Commentaire Donne les caractéristiques de l'interface réseau active. Donne la liste de toutes les interfaces réseau et leurs caractéristiques. Donne les caractéristiques de l'interface réseau du type donné. Retourne vrai si le type d'interface réseau spécifié est valide. Donne le type d'interface réseau préféré. Modifie le type d'interface réseau préféré. S'assure qu'une route existe vers l'hôte ayant l'adresse spécifiée en empruntant l'interface réseau donnée. Lemoine Frédéric Tous droits réservés 16
Gestionnaire de connexion Les types d'interface (int networktype) Interface ConnectivityManager.TYPE_BLUETOOTH ConnectivityManager.TYPE_DUMMY ConnectivityManager.TYPE_ETHERNET ConnectivityManager.TYPE_MOBILE ConnectivityManager.TYPE_MOBILE_DUN Commentaire Bluetooth Interface factice. Ne doit pas être utilisée. Ethernet Mobile Spécifiques à certaines connexions (Multimedia Messaging Service, haute priorité...). Normalement identique à Mobile mais peut être différent. ConnectivityManager.TYPE_MOBILE_HIPRI ConnectivityManager.TYPE_MOBILE_MMS ConnectivityManager.TYPE_MOBILE_SUPL ConnectivityManager.TYPE_WIFI ConnectivityManager.TYPE_WIMAX Wifi Wimax (Worldwide Interoperability for Microwave Access) Lemoine Frédéric Tous droits réservés 17
Gestionnaire de connexion Informations obtenues par la classe NetworkInfo Méthode NetworkInfo.State getstate() NetworkInfo.DetailedState getdetailedstate() int gettype() int getsubtype() String gettypename() String getsubtypename() boolean isavailable() Commentaire Donne l'état de l'interface réseau Donne l'état détaillé de l'interface réseau Donne le type d'interface (wifi, mobile..) Donne le sous-type de l'interface. boolean isconnected() Est-on connecté? Donne le type d'interface (wifi, mobile..) sous la forme d'une chaîne de caractères. Donne le sous-type de l'interface sous la forme d'une chaîne de caractères. La connexion est-elle possible? Est-on par exemple dans la zone de couverture boolean isconnectedorconnecting() Est-on connecté ou en cours de connexion? Lemoine Frédéric Tous droits réservés 18
Gestionnaire de connexion Informations obtenues par la classe NetworkInfo boolean isfailover() boolean isroaming() String getextrainfo() String getreason() Indique que l'on tente de se connecter sur ce réseau car la connexion sur le précédent a échoué. Indique si l'itinérance est activée. (changement de cellule ou de réseau tout en restant en communication). Donne une information supplémentaire sur le réseau si disponible. Si disponible, indique pourquoi la tentative de connexion précédente a échoué. Lemoine Frédéric Tous droits réservés 19
Gestionnaire de connexion Etat que peut prendre l'interface réseau Etat standard (NetworkInfo.State) Etat détaillé (NetworkInfo.DetailedState) Commentaire CONNECTED CONNECTED Connecté CONNECTING CONNECTING En cours de connexion DISCONNECTED DISCONNECTED Déconnecté DISCONNECTING DISCONNECTING En cours de déconnexion SUSPENDED SUSPENDED Le trafic IP est suspendu. AUTHENTICATING BLOCKED FAILED IDLE OBTAINING_IPADDR En cours d'authentification L'accès au réseau est bloqué La tentative de connexion a échoué Prêt. En attente de connexion. Attend d'un serveur DHCP que celui-ci fournisse une adresse IP. UNKNOWN SCANNING En cours de recherche de points d'accès. Etat inconnu. Lemoine Frédéric Tous droits réservés 20
Gestionnaire de connexion // Réseau préféré int networkpreference= connectivitymanager.getnetworkpreference(); // Réseau actif NetworkInfo activenetworkinfo=connectivitymanager.getactivenetworkinfo(); String activenetworkname=activenetworkinfo.gettypename(); // Caractéristiques de l'ensemble des interfaces réseau disponibles NetworkInfo[] networkinfo=connectivitymanager.getallnetworkinfo(); for(networkinfo netwi:networkinfo) { String networkname=netwi.gettypename(); NetworkInfo.DetailedState nstate=netwi.getdetailedstate(); boolean isroaming=netwi.isroaming();... } Lemoine Frédéric Tous droits réservés 21
Gestionnaire de connexion Lemoine Frédéric Tous droits réservés 22
Gestionnaire de connexion Changement d'état ConnectivityManager.CONNECTIVITY_ACTION BroadcastReceiver connectionreceiver = new BroadcastReceiver() { @Override public void onreceive(context context, Intent intent) { if(intent.getaction().equals(connectivitymanager.connectivity_action)) { // L'état a changé } } }; Lemoine Frédéric Tous droits réservés 23
Gestionnaire de connexion Changement d'état IntentFilter filterconnectivity = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); @Override protected void onresume() { super.onresume(); registerreceiver(connectionreceiver, filterconnectivity); } @Override protected void onpause() { super.onpause(); unregisterreceiver(connectionreceiver); } Lemoine Frédéric Tous droits réservés 24