Nexus5で試した
MPU6515 Accelerometer AK8963 Magnetometer AK8963 Magnetometer Uncalibrated MPU6515 Gyroscope MPU6515 Gyroscope Uncalibrated APDS-9930/QPDS-T930 Proximity & Light APDS-9930/QPDS-T930 Proximity & Light BMP280 Barometer Gravity Linear Acceleration Rotation Vector Step Detector Step Counter Significant Motion Detector Game Rotation Vector GeoMagnetic Rotation Vector Orientation Tilt Detector MPU6515 Game Rotation Vector Secondary AMD RMD Basic Gestures Tap Facing Tilt Pedometer PEDESTRIAN-ACTIVITY-MONITOR
指してるものが不明なものがあるので、次のコードで試してみた。
UIスレで回すと落ちたのでAsyncTask内で実行している。
import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import java.util.HashMap; import java.util.List; public class MainActivity extends Activity implements SensorEventListener { SensorManager mSensorManager; HashMap<String,Integer> sensorList; final String[] sensorLabels = {"accel","atmep","g","gyro","light","laccel","mag","pressure","prox","humid","rot"}; protected void createSensorList(){ sensorList = new HashMap<>(); sensorList.put("accel", Sensor.TYPE_ACCELEROMETER); sensorList.put("atemp", Sensor.TYPE_AMBIENT_TEMPERATURE); sensorList.put("g",Sensor.TYPE_GRAVITY); sensorList.put("gyro", Sensor.TYPE_GYROSCOPE); sensorList.put("light",Sensor.TYPE_LIGHT); sensorList.put("laccel", Sensor.TYPE_LINEAR_ACCELERATION); sensorList.put("mag",Sensor.TYPE_MAGNETIC_FIELD); sensorList.put("pressure",Sensor.TYPE_PRESSURE); sensorList.put("prox",Sensor.TYPE_PROXIMITY); sensorList.put("humid",Sensor.TYPE_RELATIVE_HUMIDITY); sensorList.put("rot",Sensor.TYPE_ROTATION_VECTOR); }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); createSensorList(); mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); new AsyncTask<Void,Void,String>(){ @Override protected String doInBackground(Void... voids) { for (String s : sensorLabels) { try { int sensorId = sensorList.get(s); List<Sensor> sensors = mSensorManager.getSensorList(sensorId); if(sensors.size() > 0){ Log.v("result","SUPPORTED: "+s); } else { Log.v("result","N/A: " +s); } } catch (RuntimeException e){ e.printStackTrace(); } } return null; } }.execute(); } @Override public void onSensorChanged(SensorEvent sensorEvent) { } @Override public void onAccuracyChanged(Sensor sensor, int i) { } }
結果
humidity sensor以外は使えるっぽい
05-09 17:44:55.713 14484-14504/? V/result﹕ SUPPORTED: accel 05-09 17:44:55.714 14484-14504/? V/result﹕ SUPPORTED: g 05-09 17:44:55.714 14484-14504/? V/result﹕ SUPPORTED: gyro 05-09 17:44:55.714 14484-14504/? V/result﹕ SUPPORTED: light 05-09 17:44:55.714 14484-14504/? V/result﹕ SUPPORTED: laccel 05-09 17:44:55.714 14484-14504/? V/result﹕ SUPPORTED: mag 05-09 17:44:55.715 14484-14504/? V/result﹕ SUPPORTED: pressure 05-09 17:44:55.715 14484-14504/? V/result﹕ SUPPORTED: prox 05-09 17:44:55.715 14484-14504/? V/result﹕ N/A: humid 05-09 17:44:55.715 14484-14504/? V/result﹕ SUPPORTED: rot