2010-05-18 3 views
17

Я пытаюсь отобразить список доступных датчиков, но это похоже на то, что нет!
Я думал, что это из-за эмулятора, но я попробовал его по телефону, и результат тот же.Показать список датчиков Android

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

ответ

24

Постоянная SensorManager.SENSOR_ALL устарела и, кажется, больше не работает.

Вместо этого запросите список датчиков с Sensor.TYPE_ALL, и он должен работать (мой эмулятор возвращает «3-осевой акселерометр« Золотая рыбка »).

+0

Работы, большие пальцы! Спасибо – Skatephone

0

getSensorList (int type) класса SensorManager дает список датчиков ==> Список. (Чтобы получить список доступных датчиков определенного типа.)

Используйте Sensor.TYPE_ALL, чтобы получить все датчики. Сделайте несколько вызовов, чтобы получить датчики разных типов.

4

Вы можете попробовать этот код: -

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

Просто поместите представление списка в макете XML.

1

Вы можете попробовать список датчиков, как показано ниже: -

Строка cAPP_FOLDER = Путь к папке

Строка cSENSOR_FILE = Имя файла

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

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

// ВЫХОДНЫЙ ФАЙЛ

{Имя датчика = "Датчик акселерометра BOSCH", поставщик = "Bosch Sensortec GmbH", исполнение = 2, тип = 1, maxRange = 156,88, разрешение = 5.984497E-4, мощность = 0,13, minDelay = 10000}

{Имя датчика = "Датчик магнитного поля BOSCH", поставщик = "Bosch Sensortec GmbH", версия = 2, тип = 2, maxRange = 1600,0, разрешение = 0,3, мощность = 0,5, minDelay = 40000}

{Sensor name = «BOSCH Orientation Sensor», поставщик = «Bosch Sensortec GmbH», версия = 2, тип = 3, maxRange = 360,0, разрешение = 1,0, мощность = 0,63, minDelay = 5000}

{Имя датчика = "BOSCH Датчик гироскопа ", поставщик =" Bosch Sensortec GmbH ", версия = 2, тип = 4, maxRange = 2500,0, разрешение = 0,003814 6973, мощность = 5.0, minDelay = 5000}

{Имя датчика = "Датчик силы тяжести", поставщик = "Bosch Sensortec GmbH", версия = 2, тип = 9, maxRange = 19.61, разрешение = 5.984497E-4 , мощность = 5.63, minDelay = 5000}

{Имя датчика = "Датчик линейного ускорения BOSCH", поставщик = "Bosch Sensortec GmbH", версия = 2, тип = 10, maxRange = 19.61, разрешение = 5.984497E-4 , мощность = 5,63, minDelay = 5000}

{Имя датчика = "BOSCH Rotation Vector Sensor", поставщик = "Bosch Sensortec GmbH", версия = 2, тип = 11, maxRange = 1.0, разрешение = 5.9604645E-8 , мощность = 5,63, minDelay = 5000}

{Имя датчика = «Некалиброванный датчик магнитного поля BOSCH», поставщик = «Bosch Sensortec GmbH», версия = 2, тип = 14, maxRange = 1600.0, разрешение = 0,3, мощность = 0,5, minDelay = 40000}

{Датчик имени = "BOSCH Game Rotation Vector Sensor", поставщик = "Bosch Sensortec GmbH", версия = 2, тип = 15, maxRange = 1,0, разрешение = 5.9604645E-8, мощность = 5,63, minDelay = 5000}

{Имя датчика = "Некалиброванный датчик гироскопа BOSCH", поставщик = "Bosch Sensortec GmbH", версия = 2, тип = 16, maxRange = 2500,0, разрешение = 0,0038146973, мощность = 5,0, minDelay = 5000}

{Имя датчика = "Вектор датчика геомагнитного вращения BOSCH", поставщик = "Bosch Sensortec GmbH", версия = 2, тип = 20, maxRange = 1,0, разрешение = 5.9604645E-8, мощность = 5.63, minDelay = 5000}

{имя датчика = "LIGHT", поставщик = "МТК", версия = 1, тип = 5, maxRange = 10240,0, разрешение = 1,0, мощность = 0,13, minDelay = 0}

{имя датчика = "ПРОКСИМИТИ ", поставщик =" MTK ", версия = 1, тип = 8, maxRange = 1,0, разрешение = 1,0, мощность = 0,13, minDelay = 0}

{Имя датчика =" SIGNIFICANT_MOTION ", поставщик =" MTK " версия = 1, тип = 17, maxRange = 85,0, разрешение = 0,1, мощность = 0,5, minDelay = -1}

+0

Хотя этот фрагмент кода приветствуется и может оказать некоторую помощь, было бы [значительно улучшено, если бы оно включало объяснение] (// meta.stackexchange.com/q/114762) из ​​* how * и * why * this solves проблема. Помните, что вы отвечаете на вопрос читателей в будущем, а не только на человека, который спрашивает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, и укажите, какие ограничения и допущения применяются. –