diff --git a/tools/cts-device-info/Android.mk b/tools/cts-device-info/Android.mk
index 4b43d39..f4c0a5c 100644
--- a/tools/cts-device-info/Android.mk
+++ b/tools/cts-device-info/Android.mk
@@ -25,7 +25,8 @@
 
 DEVICE_INFO_ACTIVITIES := \
     com.android.compatibility.common.deviceinfo.GlesStubActivity \
-    com.android.cts.deviceinfo.CameraDeviceInfo
+    com.android.cts.deviceinfo.CameraDeviceInfo \
+    com.android.cts.deviceinfo.SensorDeviceInfo
 
 LOCAL_PACKAGE_NAME := CtsDeviceInfo
 
diff --git a/tools/cts-device-info/src/com/android/cts/deviceinfo/SensorDeviceInfo.java b/tools/cts-device-info/src/com/android/cts/deviceinfo/SensorDeviceInfo.java
new file mode 100644
index 0000000..1d266f5
--- /dev/null
+++ b/tools/cts-device-info/src/com/android/cts/deviceinfo/SensorDeviceInfo.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.cts.deviceinfo;
+
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorManager;
+import android.os.Bundle;
+
+import com.android.compatibility.common.deviceinfo.DeviceInfo;
+import com.android.compatibility.common.util.DeviceInfoStore;
+
+import java.lang.Exception;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Sensor device info collector.
+ */
+public class SensorDeviceInfo extends DeviceInfo {
+
+    private static final String SENSOR = "sensor";
+    private static final String REPORTING_MODE = "reporting_mode";
+    private static final String NAME = "name";
+    private static final String VENDOR = "vendor";
+    private static final String TYPE = "type";
+    private static final String VERSION = "version";
+    private static final String MAXIMUM_RANGE = "maximum_range";
+    private static final String RESOLUTION = "resolution";
+    private static final String POWER = "power";
+    private static final String MIN_DELAY = "min_delay";
+    private static final String FIFO_RESERVED_EVENT_COUNT =
+            "fifo_reserved_event_count";
+    private static final String FIFO_MAX_EVENT_COUNT = "fifo_max_event_count";
+    private static final String STRING_TYPE = "string_type";
+    private static final String ID = "id";
+    private static final String MAX_DELAY = "max_delay";
+    private static final String IS_WAKE_UP_SENSOR = "is_wake_up_sensor";
+    private static final String IS_DYNAMIC_SENSOR = "is_dynamic_sensor";
+    private static final String IS_ADDITONAL_INFO_SUPPORTED =
+            "is_additional_info_supported";
+
+    @Override
+    protected void collectDeviceInfo(DeviceInfoStore store) throws Exception {
+        SensorManager sensorManager = (SensorManager)
+                getContext().getSystemService(Context.SENSOR_SERVICE);
+        List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
+        store.startArray(SENSOR);
+        for (Sensor sensor : sensors) {
+            store.startGroup();
+            store.addResult(REPORTING_MODE, sensor.getReportingMode());
+            store.addResult(NAME, sensor.getName());
+            store.addResult(VENDOR, sensor.getVendor());
+            store.addResult(TYPE, sensor.getType());
+            store.addResult(VERSION, sensor.getVersion());
+            store.addResult(MAXIMUM_RANGE, sensor.getMaximumRange());
+            store.addResult(RESOLUTION, sensor.getResolution());
+            store.addResult(POWER, sensor.getPower());
+            store.addResult(MIN_DELAY, sensor.getMinDelay());
+            store.addResult(FIFO_RESERVED_EVENT_COUNT,
+                    sensor.getFifoReservedEventCount());
+            store.addResult(FIFO_MAX_EVENT_COUNT,
+                    sensor.getFifoMaxEventCount());
+            store.addResult(STRING_TYPE, sensor.getStringType());
+            store.addResult(ID, sensor.getId());
+            store.addResult(MAX_DELAY, sensor.getMaxDelay());
+            store.addResult(IS_WAKE_UP_SENSOR, sensor.isWakeUpSensor());
+            store.addResult(IS_DYNAMIC_SENSOR, sensor.isDynamicSensor());
+            store.addResult(IS_ADDITONAL_INFO_SUPPORTED,
+                    sensor.isAdditionalInfoSupported());
+            store.endGroup();
+        }
+        store.endArray(); // Sensor
+    }
+}
