diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e7718ee64..db9f030fc 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -39,6 +39,7 @@
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:label="@string/app_name"
+ android:name=".TermuxAPI"
android:supportsRtl="true"
android:theme="@android:style/Theme.Material.Light" >
diff --git a/app/src/main/java/com/termux/api/SensorAPI.java b/app/src/main/java/com/termux/api/SensorAPI.java
new file mode 100644
index 000000000..a2ba1abf4
--- /dev/null
+++ b/app/src/main/java/com/termux/api/SensorAPI.java
@@ -0,0 +1,79 @@
+package com.termux.api;
+
+import android.content.Context;
+import android.content.Intent;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.util.JsonWriter;
+import android.util.SparseArray;
+import com.termux.api.util.ResultReturner;
+
+public class SensorAPI implements SensorEventListener{
+ private static SensorManager mSensorManager;
+
+ private static SparseArray mSensorValues = new SparseArray<>();
+
+ SensorAPI(Context context){
+ mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
+
+ tryRegisterSensor(mSensorManager, Sensor.TYPE_ACCELEROMETER);
+ tryRegisterSensor(mSensorManager, Sensor.TYPE_AMBIENT_TEMPERATURE);
+ tryRegisterSensor(mSensorManager, Sensor.TYPE_LIGHT);
+ tryRegisterSensor(mSensorManager, Sensor.TYPE_RELATIVE_HUMIDITY);
+ tryRegisterSensor(mSensorManager, Sensor.TYPE_PRESSURE);
+ tryRegisterSensor(mSensorManager, Sensor.TYPE_PROXIMITY);
+ }
+
+ private void tryRegisterSensor(SensorManager manager, int type){
+ Sensor sensor = manager.getDefaultSensor(type);
+ if (sensor != null){
+ manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
+ }
+ }
+
+ public static void onReceive(TermuxApiReceiver apiReceiver, Intent intent, final int type) {
+ ResultReturner.returnData(apiReceiver, intent, new ResultReturner.ResultJsonWriter() {
+ @Override
+ public void writeJson(JsonWriter out) throws Exception {
+ Sensor sensor;
+ if ((sensor = mSensorManager.getDefaultSensor(type)) != null) {
+ out.beginObject();
+ out.name("info").value(sensor.toString());
+ float[] data;
+ if ((data = mSensorValues.get(type)) != null) {
+ switch (type) {
+ case Sensor.TYPE_ACCELEROMETER:
+ out.name("data").beginObject();
+ out.name("x").value(data[0]);
+ out.name("y").value(data[1]);
+ out.name("z").value(data[2]);
+ out.endObject();
+ default:
+ out.name("data").value(data[0]);
+ }
+ } else {
+ out.name("data").value("");
+ }
+ out.endObject();
+ } else {
+ out.beginObject();
+ out.name("info").value("");
+ out.name("data").value("");
+ out.endObject();
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onAccuracyChanged(Sensor sensor, int accuracy) {
+
+ }
+
+ @Override
+ public void onSensorChanged(SensorEvent event) {
+ mSensorValues.put(event.sensor.getType(), event.values);
+ }
+}
diff --git a/app/src/main/java/com/termux/api/TermuxAPI.java b/app/src/main/java/com/termux/api/TermuxAPI.java
new file mode 100644
index 000000000..2add28dcb
--- /dev/null
+++ b/app/src/main/java/com/termux/api/TermuxAPI.java
@@ -0,0 +1,21 @@
+package com.termux.api;
+
+import android.app.Application;
+import android.hardware.SensorManager;
+
+public class TermuxAPI extends Application {
+ private SensorAPI sensorAPI;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ sensorAPI = new SensorAPI(this);
+ }
+
+ @Override
+ public void onTerminate() {
+ ((SensorManager) getSystemService(SENSOR_SERVICE)).unregisterListener(sensorAPI);
+
+ super.onTerminate();
+ }
+}
diff --git a/app/src/main/java/com/termux/api/TermuxApiReceiver.java b/app/src/main/java/com/termux/api/TermuxApiReceiver.java
index c415f6c4e..d29dbb729 100644
--- a/app/src/main/java/com/termux/api/TermuxApiReceiver.java
+++ b/app/src/main/java/com/termux/api/TermuxApiReceiver.java
@@ -5,6 +5,7 @@
import android.content.Context;
import android.content.Intent;
+import android.hardware.Sensor;
import com.termux.api.util.TermuxApiLogger;
import com.termux.api.util.TermuxApiPermissionActivity;
@@ -68,6 +69,24 @@ public void onReceive(Context context, Intent intent) {
case "Share":
ShareAPI.onReceive(this, context, intent);
break;
+ case "SensorAccelerometer":
+ SensorAPI.onReceive(this, intent, Sensor.TYPE_ACCELEROMETER);
+ break;
+ case "SensorProximity":
+ SensorAPI.onReceive(this, intent, Sensor.TYPE_PROXIMITY);
+ break;
+ case "SensorTemp":
+ SensorAPI.onReceive(this, intent, Sensor.TYPE_AMBIENT_TEMPERATURE);
+ break;
+ case "SensorLight":
+ SensorAPI.onReceive(this, intent, Sensor.TYPE_LIGHT);
+ break;
+ case "SensorPressure":
+ SensorAPI.onReceive(this, intent, Sensor.TYPE_PRESSURE);
+ break;
+ case "SensorHumidity":
+ SensorAPI.onReceive(this, intent, Sensor.TYPE_RELATIVE_HUMIDITY);
+ break;
case "SmsInbox":
if (TermuxApiPermissionActivity.checkAndRequestPermissions(context, intent, Manifest.permission.READ_SMS, Manifest.permission.READ_CONTACTS)) {
SmsInboxAPI.onReceive(this, context, intent);