Android - Capteurs

La plupart des appareils Android ont des capteurs intégrés qui mesurent le mouvement, l'orientation et diverses conditions environnementales. La plate-forme Android prend en charge trois grandes catégories de capteurs.

  • Capteurs de mouvement
  • Capteurs environnementaux
  • Capteurs de position

Certains capteurs sont basés sur le matériel et certains sont des capteurs logiciels. Quel que soit le capteur, android nous permet d'obtenir les données brutes de ces capteurs et de les utiliser dans notre application. Pour cet androïde nous fournit quelques classes.

Android fournit des classes SensorManager et Sensor pour utiliser les capteurs dans notre application. Pour utiliser des capteurs, la première chose à faire est d'instancier l'objet de la classe SensorManager. Il peut être réalisé comme suit.

SensorManager sMgr;
sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);

La prochaine chose que vous devez faire est d'instancier l'objet de la classe Sensor en appelant la méthode getDefaultSensor () de la classe SensorManager. Sa syntaxe est donnée ci-dessous -

Sensor light;
light = sMgr.getDefaultSensor(Sensor.TYPE_LIGHT);

Une fois que ce capteur est déclaré, vous devez enregistrer son auditeur et remplacer deux méthodes qui sont onAccuracyChanged et onSensorChanged. Sa syntaxe est la suivante -

sMgr.registerListener(this, light,SensorManager.SENSOR_DELAY_NORMAL);
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

public void onSensorChanged(SensorEvent event) {
}

Obtenir la liste des capteurs pris en charge

Vous pouvez obtenir une liste des capteurs pris en charge par votre appareil en appelant la méthode getSensorList, qui renverra une liste de capteurs contenant leur nom et leur numéro de version et bien plus d'informations. Vous pouvez ensuite parcourir la liste pour obtenir les informations. Sa syntaxe est donnée ci-dessous -

sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);
List<Sensor> list = sMgr.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor: list){
}

En dehors de ces méthodes, il existe d'autres méthodes fournies par la classe SensorManager pour gérer le cadre des capteurs. Ces méthodes sont énumérées ci-dessous -

Sr. Non Méthode et description
1

getDefaultSensor(int type)

Cette méthode obtient le capteur par défaut pour un type donné.

2

getInclination(float[] I)

Cette méthode calcule l'angle d'inclinaison géomagnétique en radians à partir de la matrice d'inclinaison.

3

registerListener(SensorListener listener, int sensors, int rate)

Cette méthode enregistre un auditeur pour le capteur

4

unregisterListener(SensorEventListener listener, Sensor sensor)

Cette méthode annule l'enregistrement d'un écouteur pour les capteurs avec lesquels il est enregistré.

5

getOrientation(float[] R, float[] values)

Cette méthode calcule l'orientation de l'appareil en fonction de la matrice de rotation.

6

getAltitude(float p0, float p)

Cette méthode calcule l'altitude en mètres à partir de la pression atmosphérique et de la pression au niveau de la mer.

Exemple

Voici un exemple illustrant l'utilisation de la classe SensorManager. Il crée une application de base qui vous permet d'afficher la liste des capteurs sur votre appareil.

Pour expérimenter cet exemple, vous pouvez l'exécuter sur un appareil réel ou dans un émulateur.

Pas La description
1 Vous utiliserez Android Studio pour créer une application Android sous un package com.example.sairamkrishna.myapplication.
2 Modifiez le fichier src / MainActivity.java pour ajouter le code nécessaire.
3 Modifiez le res / layout / activity_main pour ajouter les composants XML respectifs.
4 Exécutez l'application et choisissez un appareil Android en cours d'exécution, installez l'application dessus et vérifiez les résultats.

Voici le contenu de la modification MainActivity.java.

package com.example.sairamkrishna.myapplication;

import android.app.Activity;
import android.hardware.SensorManager;
import android.os.Bundle;

import android.util.Log;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.TextView;

import java.util.List;
import android.hardware.Sensor;
import android.hardware.SensorManager;

public class MainActivity extends Activity {
   TextView tv1=null;
   private SensorManager mSensorManager;
   @Override
   
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      tv1 = (TextView) findViewById(R.id.textView2);
      tv1.setVisibility(View.GONE);
      
      mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
      List<Sensor> mList= mSensorManager.getSensorList(Sensor.TYPE_ALL);
      
      for (int i = 1; i < mList.size(); i++) {
         tv1.setVisibility(View.VISIBLE);
         tv1.append("\n" + mList.get(i).getName() + "\n" + mList.get(i).getVendor() + "\n" + mList.get(i).getVersion());
      }
   }
	
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }
   
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      
      int id = item.getItemId();
      
      //noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
         return true;
      }
      return super.onOptionsItemSelected(item);
   }
}

Voici le contenu modifié du xml activity_main.xml.

Dans le code ci-dessous abc indique sur le logo de tutorialspoint.com
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   tools:context=".MainActivity"
   android:transitionGroup="true">
   
   <TextView android:text="Sensor " android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:theme="@style/Base.TextAppearance.AppCompat" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="New Text"
      android:id="@+id/textView2"
      android:layout_below="@+id/imageView"
      android:layout_alignParentBottom="true"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true" />

</RelativeLayout>

Voici le contenu de la res/values/string.xml.

<resources>
   <string name="app_name">My Application</string>
   <string name="hello_world">Hello world!</string>
   <string name="action_settings">Settings</string>
</resources>

Voici le contenu de AndroidManifest.xml fichier.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         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>

Essayons de lancer notre application que nous venons de modifier. Je suppose que vous avez créé votreAVDlors de la configuration de l'environnement. Pour exécuter l'application à partir du studio Android, ouvrez l'un des fichiers d'activité de votre projet et cliquez sur l' icône Exécuter dans la barre d'outils. Le studio Android installe l'application sur votre AVD et le démarre et si tout va bien avec votre configuration et votre application, il affichera la fenêtre Emulator suivante -

Maintenant, si vous regardez l'écran de votre appareil, vous verrez la liste des capteurs pris en charge par votre appareil avec leur nom et version et d'autres informations.

Si vous exécutez cette application sur différents appareils, la sortie sera différente car la sortie dépend du nombre de capteurs pris en charge par votre appareil.