Vous êtes sur la page 1sur 36

08/03/2021

capteurs : Principes de base

Mesurer le mouvement, l'orientation et les conditions


environnementales

1
08/03/2021

Contenu
 Catégories et types de capteurs
 Capteurs sur l’ emulateur
 Capteur Android framwork
 Découvrir les capteurs et leurs capacités
 Configurations de capteurs
 Surveillance des événements

2
08/03/2021

Les catégories de capteurs


1. Détecteurs de mouvement
2. Capteurs environnementaux
3. Capteurs de position

3
08/03/2021

Détecteurs de mouvement
1. Accéléromètres
2. Capteurs de gravité
3. Gyroscopes
4. Capteurs vectoriels de rotation

4
08/03/2021

Capteurs environnementaux
Mesurer les conditions
environnementales
1. Baromètres
2. Photomètres (capteurs de lumière)
3. Thermomètres

5
08/03/2021

Capteurs de position

Mesurer la position physique de


l'appareil
1. Magnétomètres (capteurs de
champ géomagnétique)
2. Capteurs de proximité

6
08/03/2021

Types de capteurs

Les types de capteurs pris en charge par la plate-forme


Android
1. Capteurs matériels
2. Capteurs logiciels

7
08/03/2021

Capteurs matériels

Composant physique intégré à l'appareil


1. capte des données en mesurant directement des propriétés
spécifiques
2. Exemples: capteur de lumière, capteur de proximité,
magnétomètre, accéléromètre
8

8
08/03/2021

Capteurs logiciels

Logiciel: capteur virtuel ou composite


1. Dérive les données d'un ou plusieurs capteurs matériels
2. Exemples: accélération linéaire, orientation

9
08/03/2021

Disponibilité des capteurs


La disponibilité des capteurs varie d'un appareil à l'autre, elle peut
également varier entre les versions d'Android
1. La plupart des appareils ont un accéléromètre et un magnétomètre
2. Certains appareils ont des baromètres ou des thermomètres
3. L'appareil peut avoir plus d'un capteur d'un type donné
4. La disponibilité varie selon les versions d'Android

10

10
08/03/2021

Capteurs et émulateur Android

1. Utiliser des capteurs virtuels pour les tests: dans l'émulateur,


utilisez le panneau sur le côté droit, sélectionnez ...> Virtual
sensors
a. Onglet Accelerometer : testez l'application pour les changements de position
et / ou d'orientation de l'appareil
b. Onglet Capteurs supplémentaires : Simuler les capteurs de position et
d'environnement

11

11
08/03/2021

Capteurs et émulateur Android

12

12
08/03/2021

Émulateur: onglet Accéléromètre

1. Simule le mouvement de l'appareil tel que l'inclinaison et la


rotation
2. Simule la réponse des accéléromètres et magnétomètres
3. Les champs des valeurs résultantes affichent les valeurs que
l'application peut récupérer

13

13
08/03/2021

Capteurs supplémentaires

1. Température ambiante
2. Champ magnétique sur l' axe x, l' axe y et l' axe z . Les valeurs sont en microtesla (μT)
3. Proximité: distance entre l'appareil et l'objet
4. Lumière: mesure l'éclairement
5. Pression: mesure la pression de l'air ambiant
6. Humidité relative

14

14
08/03/2021

Classes et interfaces du framework


SensorManager
1. Accéder et écouter les capteurs
2. Enregistrer et désenregistrer les écouteurs d'événements de capteur
3. Acquérir des informations d'orientation
4. Fournit des constantes pour la précision, les taux d'acquisition de données et
l'étalonnage

15

15
08/03/2021

Classes de framework importantes


● Sensor: Déterminer les capacités du capteur
● SensorEvent: informations sur l'événement, y compris les
données du capteur
1. SensorEventListener: reçoit des notifications sur les
événements du capteur
a. Lorsque le capteur a de nouvelles données
b. Lorsque la précision du capteur change
16

16
08/03/2021

Classes de capteurs et leurs utilisations


TYPE_ACCELEROMETER Détection de mouvement (secousse, inclinaison, etc.)

TYPE_AMBIENT_TEMPERATURE Surveillance de la température de l'air

TYPE_GRAVITY Détection de mouvement (secousse, inclinaison, etc.)

TYPE_GYROSCOPE Détection de la rotation

TYPE_LIGHT Contrôle de la luminosité de l'écran

TYPE_LINEAR_ACCELERATION Surveillance de l'accélération le long d'un seul axe

TYPE_MAGNETIC_FIELD Créer une boussole

17

17
08/03/2021

Utilisation de capteurs
1. Déterminer quels capteurs sont disponibles sur l'appareil
2. Déterminer les capacités d'un capteur individuel
a. Portée maximale, fabricant, puissance requise, résolution

3. Enregistrer les écouteurs d'événements de capteur


4. Acquérir les données brutes du capteur
a. Définissez également le taux minimum d'acquisition des données du capteur

5. Annuler l'enregistrement des écouteurs d'événement de capteur 18

18
08/03/2021

Découvrir les
capteurs et leurs
capacités

19

19
08/03/2021

Identify sensors

Créer une instance de SensorManager


1. Appelez getSystemService ()
2. Passer l' argument SENSOR_SERVICE

mSensorManager = (SensorManager)
getSystemService(Context.SENSOR_SERVICE);

20

20
08/03/2021

Obtenir la liste des capteurs

Utilisez getSensorList ()
• Pour obtenir tous les capteurs de l'appareil, utilisez la constante TYPE_ALL
List<Sensor> deviceSensors =
mSensorManager.getSensorList(Sensor.TYPE_ALL);
• Pour obtenir des capteurs d'un type spécifique, utilisez une constante telle
queTYPE_PROXIMITY ,TYPE_GYROSCOPE ouTYPE_GRAVITY

21

21
08/03/2021

Identifier les caractéristiques du capteur


Les méthodes de la classe Sensor
 getResolution() pour la résolution du capteur
 getMaximumRange() pour la plage de mesure maximale
 getPower() pour les besoins d'alimentation du capteur
 getVendor() et getVersion() différentes versions de capteur
 getMinDelay() pour déterminer la vitesse maximale à laquelle le capteur peut
acquérir des données

22

22
08/03/2021

Exemple: identifier le capteur du magnétomètre

private SensorManager mSensorManager;


// ...
mSensorManager = (SensorManager)
getSystemService(Context.SENSOR_SERVICE);
if (mSensorManager.getDefaultSensor
(Sensor.TYPE_MAGNETIC_FIELD) != null){
// Success! There's a magnetometer.
} else {
// Failure! No magnetometer.
}

23

23
08/03/2021

Gestion de
différentes
configurations
de capteurs

24

24
08/03/2021

Utilisez les filtres Google Play pour cibler les appareils

 Google Play filters target specific sensor configurations


• Filtrer les appareils qui n'ont pas de configuration de capteur
 <uses-feature> dans Android manifest

<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />

25

25
08/03/2021

Détection des capteurs lors de l'exécution


• Détectez les capteurs lors de l'exécution
• Utilisez getDefaultSensor() et transmettez la constante
de type pour un capteur spécifique tel que TYPE_PROXIMITY,
TYPE_GYROSCOPE, ou TYPE_GRAVITY
• S'il y a plus d'un capteur pour un type donné, le système en
désigne un par défaut
• Si aucun de ce type n'existe, la méthode retourne null
26

26
08/03/2021

Monitoring
sensor events

27

27
08/03/2021

Enregistrer listener pour l'événement de capteur

 L'application doit enregistrer listener pour l'événement du capteur


 enregistrer dans activity onStart() and annuler en onStop()
 Il faut eviter de s’enregistrer dans onCreate(), onResume(), or onPause()
 Il faut s’assurer que les capteurs utilisent l'alimentation uniquement lorsque l'application
est au premier plan
 Les capteurs continuent de fonctionner même si l'application est en mode multi-
fenêtre

28

28
08/03/2021

Register listener in onStart()


• Enregistrer l'écouteur d'événements de capteur pour un capteur spécifique
@Override
protected void onStart() {
super.onStart();
if (mIsLightSensorPresent) {
mSensorManager.registerListener(this, mSensorLight,
SensorManager.SENSOR_DELAY_UI);
}
}

29

29
08/03/2021

Annuler l'enregistrement dans


onStop()
@Override
protected void onStop() {
super.onStop();
mSensorManager.unregisterListener(this);
}

30

30
08/03/2021

Gérer les événements du capteur


1. Implémenter l' interface SensorEventListener avec
callbacks
○ onSensorChanged(SensorEvent event)
○ onAccuracyChanged(Sensor sensor, int accuracy)
2. Obtenir les types de capteurs et les valeurs de SensorEvent
object
3. Mettre à jour l'application
31

31
08/03/2021

SensorEventListener et callbacks
public class SensorActivity extends Activity
Implements SensorEventListener {
// …
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
// mettre un traitement si les données changes
}
@Override
public final void onAccuracyChanged(Sensor sensor, int accuracy) {
// mettre un traitement si la précision change.
}
}
32

32
08/03/2021

onAccuracyChanged()
● onAccuracyChanged() appelé quand la précision d'un
capteur change
● Sensor : identifie le capteur qui a changé la précision
● Constante « état de précision » :
○ SENSOR_STATUS_ACCURACY_LOW
○ SENSOR_STATUS_ACCURACY_MEDIUM
○ SENSOR_STATUS_ACCURACY_HIGH
○ SENSOR_STATUS_UNRELIABLE
○ SENSOR_STATUS_NO_CONTACT
33

33
08/03/2021

onSensorChanged()
onSensorChanged() appelé lorsque le capteur signale de
nouvelles données, en passant un SensorEvent
SensorEvent contient des informations sur les nouvelles
données du capteur
 sensor: capteur qui a généré l'événement
 values: données générées par le capteur, sous forme de tableau de valeurs
flottantes. Différents capteurs fournissent différentes quantités et types de données.

34

34
08/03/2021

Example: modifications du capteur de lumière

@Override
public void onSensorChanged(SensorEvent sensorEvent) {
int sensorType = sensorEvent.sensor.getType();
float currentValue = sensorEvent.values[0];

if (sensorType == Sensor.TYPE_LIGHT) {
// Get light sensor string and fill data placeholder.
mTextSensorLight.setText(getResources().getString(
R.string.label_light, currentValue));
}
}

35

35
08/03/2021

Source

1. https://Developper.android.com

36

36

Vous aimerez peut-être aussi