Afficher une liste de capteurs Android
j'essaie d'afficher une liste de capteurs disponibles mais c'est comme s'il n'y en avait pas!
Je pensais que c'était à cause de l'émulateur, mais je l'ai essayé sur le téléphone et le résultat est le même.
private SensorManager mSensorManager;
TextView mSensorsTot,mSensorAvailables;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Get the texts fields of the layout and setup to invisible
mSensorsTot = (TextView) findViewById(R.id.sensoritot);
mSensorAvailables = (TextView) findViewById(R.id.sensoridisponibili);
// Get the SensorManager
mSensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
// List of Sensors Available
List<Sensor> msensorList = mSensorManager.getSensorList(SensorManager.SENSOR_ALL);
// Print how may Sensors are there
mSensorsTot.setText(msensorList.size()+" "+this.getString(R.string.sensors)+"!");
// Print each Sensor available using sSensList as the String to be printed
String sSensList = new String("");
Sensor tmp;
int x,i;
for (i=0;i<msensorList.size();i++){
tmp = msensorList.get(i);
sSensList = " "+sSensList+tmp.getName(); // Add the sensor name to the string of sensors available
}
// if there are sensors available show the list
if (i>0){
sSensList = getString(R.string.sensors)+":"+sSensList;
mSensorAvailables.setText(sSensList);
}
}
4 réponses
la constante SensorManager.SENSOR_ALL
est déprécié et ne semble plus fonctionner.
interrogez la liste des capteurs avec Sensor.TYPE_ALL
à la place et ça devrait marcher (mon émulateur renvoie un "accéléromètre Goldfish à 3 axes").
Vous pouvez essayer ce code:
package com.example.sensor;
import java.util.List;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends ActionBarActivity {
SensorManager smm;
List<Sensor> sensor;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
smm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
lv = (ListView) findViewById (R.id.listView1);
sensor = smm.getSensorList(Sensor.TYPE_ALL);
lv.setAdapter(new ArrayAdapter<Sensor>(this, android.R.layout.simple_list_item_1, sensor));
}
}
il suffit de mettre une vue liste dans votre mise en page xml.
Vous pouvez essayer de lister les capteurs comme suit: -
String cAPP_FOLDER = chemin de votre dossier
chaîne cSENSOR_FILE = nom de votre fichier
// Create a file to export the sensor info.
File fp = new File(cAPP_FOLDER + cSENSOR_FILE);
fp.createNewFile();
PrintWriter pw = new PrintWriter(new FileWriter(fp, true));
SensorManager oSM = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
List<Sensor> sensorsList = oSM.getSensorList(Sensor.TYPE_ALL);
for (Sensor s : sensorsList) {
pw.write(s.toString() + "\n");
}
pw.close();
//////////////////////////////////////////////////////////////////////////////
/ / FICHIER DE SORTIE
{nom du capteur= "capteur D'accéléromètre BOSCH", vendeur = "Bosch Sensortec GmbH", version=2, type = 1, maxRange=156,88, résolution=5.984497 E-4, Puissance=0,13, minDelay=10000}
{nom du Capteur="BOSCH Détecteur de Champ Magnétique", vendor="Bosch Sensortec GmbH", version=2, type=2, maxRange=1600.0, résolution=0.3, puissance=0.5, minDelay=40000}
{nom du Capteur="BOSCH Capteur d'Orientation", vendor="Bosch Sensortec GmbH", version=2, type=3, maxRange=360.0, résolution=1.0, puissance=0.63, minDelay=5000}
{Sensor name= "BOSCH Gyroscope Sensor", vendor= "Bosch Sensortec GmbH", version=2, type= 4, maxRange=2500.0, résolution=0.0038146973, puissance=5.0, minDelay=5000}
{Sensor name= "BOSCH Gravity Sensor", vendor= "Bosch Sensortec GmbH", version=2, type= 9, maxRange=19.61, resolution=5.984497 E-4, power=5.63, minDelay=5000}
{nom du Capteur="BOSCH Linéaire Capteur d'Accélération", vendor="Bosch Sensortec GmbH", version=2, type=10, maxRange=19.61, résolution=5.984497 E-4, puissance=5.63, minDelay=5000}
{nom du Capteur="BOSCH Vecteur de Rotation du Capteur", vendor="Bosch Sensortec GmbH", version=2, type=11, maxRange=1.0, résolution=5.9604645 E-8, puissance=5.63, minDelay=5000}
{nom du Capteur="BOSCH Champ Magnétique de Valeur brute de Capteur", vendor="Bosch Sensortec GmbH", version=2, type=14, maxRange=1600.0, résolution=0.3, puissance=0.5, minDelay=40000}
{Sensor name= "BOSCH Game Rotation Vector Sensor", vendor= "Bosch Sensortec GmbH", version=2, type=15, maxRange = 1.0, resolution=5.9604645 E-8, power=5.63, minDelay=5000}
{nom du Capteur="BOSCH Gyroscope Capteur non étalonné", vendor="Bosch Sensortec GmbH", version=2, type=16, maxRange=2500.0, résolution=0.0038146973, puissance=5.0, minDelay=5000}
{Sensor name= "BOSCH Geomagnetic Rotation Vector Sensor", vendor= "Bosch Sensortec GmbH", version=2, type=20, maxRange=1.0, resolution=5.9604645 E-8, power=5.63, minDelay=5000}
{nom du Capteur="LUMIÈRE", vendor="MTK", version=1, type=5, maxRange=10240.0, résolution=1.0, puissance=0.13, minDelay=0}
{Capteur name="PROXIMITÉ", vendor="MTK", version=1, type=8, maxRange=1.0, résolution=1.0, puissance=0.13, minDelay=0}
{Sensor name= "SIGNIFICANT_MOTION", vendor= "MTK", version=1, type=17, maxRange=85.0, resolution=0.1, power=0.5, minDelay=-1}
getSensorList (type int) de la classe SensorManager donne une liste de capteurs ==> liste. (Pour obtenir la liste des capteurs disponibles, d'un certain type.)
Utiliser Le Capteur.TAPE_ALL pour obtenir tous les capteurs. Faites plusieurs appels pour obtenir des capteurs de différents types.