web-dev-qa-db-ja.com

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

定数 SensorManager.SENSOR_ALL は非推奨になり、機能しなくなったようです。

代わりに Sensor.TYPE_ALL でセンサーリストをクエリすると、機能するはずです(私のエミュレーターは「Goldfish3軸加速度計」を返します)。

28
Henning

このコードを試すことができます:-

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レイアウトにリストビューを配置するだけです。

7
Yash Gadle

以下のようにセンサーをリストしてみてください:-

文字列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();

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

//出力ファイル

{Sensor name = "BOSCH Accelerometer Sensor"、vendor = "Bosch Sensortec GmbH"、version = 2、type = 1、maxRange = 156.88、resolution = 5.984497E-4、power = 0.13、minDelay = 10000}

{センサー名= "BOSCH磁場センサー"、vendor = "Bosch Sensortec GmbH"、バージョン= 2、タイプ= 2、maxRange = 1600.0、解像度= 0.3、電力= 0.5、minDelay = 40000}

{Sensor name = "BOSCH Orientation Sensor"、vendor = "Bosch Sensortec GmbH"、version = 2、type = 3、maxRange = 360.0、resolution = 1.0、power = 0.63、minDelay = 5000}

{センサー名= "BOSCHジャイロスコープセンサー"、vendor = "Bosch Sensortec GmbH"、バージョン= 2、タイプ= 4、maxRange = 2500.0、解像度= 0.0038146973、電力= 5.0、minDelay = 5000}

{Sensor name = "BOSCH Gravity Sensor"、vendor = "Bosch Sensortec GmbH"、version = 2、type = 9、maxRange = 19.61、resolution = 5.984497E-4、power = 5.63、minDelay = 5000}

{Sensor name = "BOSCH Linear Acceleration Sensor"、vendor = "Bosch Sensortec GmbH"、version = 2、type = 10、maxRange = 19.61、resolution = 5.984497E-4、power = 5.63、minDelay = 5000}

{Sensor name = "BOSCH Rotation Vector Sensor"、vendor = "Bosch Sensortec GmbH"、version = 2、type = 11、maxRange = 1.0、resolution = 5.9604645E-8、power = 5.63、minDelay = 5000}

{センサー名= "BOSCH磁場未校正センサー"、vendor = "Bosch Sensortec GmbH"、バージョン= 2、タイプ= 14、maxRange = 1600.0、解像度= 0.3、電力= 0.5、minDelay = 40000}

{センサー名= "BOSCHゲーム回転ベクトルセンサー"、vendor = "Bosch Sensortec GmbH"、バージョン= 2、タイプ= 15、maxRange = 1.0、解像度= 5.9604645E-8、電力= 5.63、minDelay = 5000}

{Sensor name = "BOSCH Gyroscope Uncalibrated Sensor"、vendor = "Bosch Sensortec GmbH"、version = 2、type = 16、maxRange = 2500.0、resolution = 0.0038146973、power = 5.0、minDelay = 5000}

{センサー名= "BOSCH地磁気回転ベクトルセンサー"、vendor = "Bosch Sensortec GmbH"、バージョン= 2、タイプ= 20、maxRange = 1.0、解像度= 5.9604645E-8、電力= 5.63、minDelay = 5000}

{センサー名= "LIGHT"、vendor = "MTK"、バージョン= 1、タイプ= 5、maxRange = 10240.0、解像度= 1.0、電力= 0.13、minDelay = 0}

{センサー名= "PROXIMITY"、ベンダー= "MTK"、バージョン= 1、タイプ= 8、maxRange = 1.0、解像度= 1.0、電力= 0.13、minDelay = 0}

{センサー名= "SIGNIFICANT_MOTION"、vendor = "MTK"、バージョン= 1、タイプ= 17、maxRange = 85.0、解像度= 0.1、電力= 0.5、minDelay = -1}

4
S G

sensorManagerクラスのgetSensorList(int型)は、センサーのリストを提供します==>リスト。 (特定のタイプの使用可能なセンサーのリストを取得するため。)

Sensor.TYPE_ALLを使用して、すべてのセンサーを取得します。複数の呼び出しを行って、さまざまなタイプのセンサーを取得します。

0
Sree Rama