Mostrar uma lista de sensores Android

Estou a tentar mostrar uma lista de sensores disponíveis, mas é como se não houvesse!
Estava a pensar que era por causa do emulador, mas tentei ao telefone e o resultado é o mesmo.

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);
    }
}
Author: Taryn, 2010-05-18

4 answers

A constante SensorManager.SENSOR_ALL está desactualizado e parece que já não funciona.

Consultar a lista de sensores com Sensor.TYPE_ALL em vez disso, deve funcionar (o meu emulador devolve um"acelerómetro de 3 eixos Goldfish").

 25
Author: Henning, 2010-05-19 08:05:48

Pode tentar este código: -

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));
}
}

Basta colocar uma lista na sua disposição xml.

 6
Author: Yash Kumar, 2014-12-29 15:35:58
Pode tentar listar os sensores como se segue:

Texto capp_ pasta = localização da sua pasta

Cadeia de caracteres csensor_ file = nome do seu ficheiro

// 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();

//////////////////////////////////////////////////////////////////////////////

/ / FICHEIRO DE SAÍDA

{Sensor name="BOSCH Sensor Acelerômetro ", o vendedor="Bosch Sensortec GmbH", versão=2, tipo=1, maxRange=156.88, resolução=5.984497 E-4, potência=0.13, minDelay=10000}

{Nome do Sensor= " BOSCH Magnetic Field Sensor", vendor= "Bosch Sensortec GmbH", version = 2, type=2, maxRange=1600.0, resolution=0.3, power=0.5, minDelay=40000}

{Nome do Sensor= "BOSCH Orientation Sensor", vendedor= "Bosch Sensortec GmbH", versão = 2, Tipo=3, maxRange=360.0, resolução = 1.0, potência=0.63, minDelay=5000}

{Sensor name="BOSCH Sensor de Giroscópio", o vendedor="Bosch Sensortec GmbH", versão=2, tipo=4, maxRange=2500.0, resolução=0.0038146973, poder=5.0, minDelay=5000}

{Nome do Sensor= " BOSCH Gravity Sensor", o vendedor="Bosch Sensortec GmbH", versão=2, type=9, maxRange=19.61, resolução=5.984497 E-4, potência=5.63, minDelay=5000}

{Sensor name="BOSCH Linear Sensor de Aceleração", o vendedor="Bosch Sensortec GmbH", versão=2, type=10, maxRange=19.61, resolução=5.984497 E-4, potência=5.63, minDelay=5000}

{Nome do Sensor= "BOSCH Rotation Vector Sensor", vendedor= "Bosch Sensortec GmbH", versão = 2, Tipo = 11, maxRange = 1.0, resolução=5.9604645 e-8, Potência=5.63, minDelay=5000}

{Sensor nome = "BOSCH Magnetic Field Uncalibrated Sensor", vendedor= "Bosch Sensortec GmbH", versão = 2, type = 14, maxRange=1600.0, resolution=0.3, power=0.5, minDelay=40000}

{Nome do Sensor= "BOSCH Game Rotation Vector Sensor", vendedor = "Bosch Sensortec GmbH", versão = 2, Tipo = 15, maxRange = 1.0, resolução=5.9604645 e-8, Potência=5.63, minDelay=5000}

{Nome do Sensor= "BOSCH Gyroscope Uncalibrated Sensor", vendedor= "Bosch Sensortec GmbH", versão = 2, Tipo = 16, maxRange=2500.0, resolução=0.0038146973, potência=5,0, minDelay = 5000}

{Sensor name="BOSCH Geomagnética Rotação de Vetor do Sensor", o vendedor="Bosch Sensortec GmbH", versão=2, type=20, maxRange=1.0, resolução=5.9604645 E-8, power=5.63, minDelay=5000}

{Nome Do Sensor= "luz", fornecedor= "MTK", versão = 1, Tipo = 5, maxRange=10240.0, resolução = 1.0, potência=0.13, minDelay=0}

{Nome do Sensor= "proximidade", fornecedor=" MTK", versão=1, Tipo = 8, maxRange = 1.0, resolução = 1.0, potência=0.13, minDelay=0}

{Sensor nome = "SIGNIFICANT_MOTION", vendor= "MTK", version = 1, type=17, maxRange = 85.0, resolution=0.1, power=0.5, minDelay=-1}

 2
Author: S G, 2017-03-21 19:45:04

GetSensorList (int tipo) da classe SensorManager dá uma lista de sensores = = > lista. (Para obter a lista de sensores disponíveis de um certo tipo.)

Usa O Sensor.Dactilografado para obter todos os sensores. Faça várias chamadas para obter sensores de diferentes tipos.

 0
Author: Sree Rama, 2013-12-19 04:59:33