isundil 8 жил өмнө
parent
commit
450ddeca8c

+ 27 - 0
android/.idea/misc.xml

@@ -1,5 +1,32 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="NullableNotNullManager">
+    <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
+    <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
+    <option name="myNullables">
+      <value>
+        <list size="4">
+          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
+          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
+          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
+          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
+        </list>
+      </value>
+    </option>
+    <option name="myNotNulls">
+      <value>
+        <list size="4">
+          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
+          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
+          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
+          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
+        </list>
+      </value>
+    </option>
+  </component>
   <component name="ProjectLevelVcsManager" settingsEditedManually="false">
     <OptionsSetting value="true" id="Add" />
     <OptionsSetting value="true" id="Remove" />

+ 37 - 1
android/app/src/main/java/knacki/com/androimouse/MainActivity.java

@@ -1,13 +1,49 @@
 package knacki.com.androimouse;
 
-import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.Button;
+
+import java.util.logging.Logger;
 
 public class MainActivity extends AppCompatActivity {
+	private final static Logger logger = Logger.getLogger(MainActivity.class.getName());
 
 	@Override
 	protected void onCreate(Bundle savedInstanceState) {
 		super.onCreate(savedInstanceState);
 		setContentView(R.layout.activity_main);
+
+		Button bt = (Button) findViewById(R.id.button);
+		bt.setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				float[] values = SensorService.get(MainActivity.this).getLatestValue();
+				StringBuilder s = new StringBuilder("[");
+
+				if (values != null) {
+					for (Float i: values) {
+						s.append(i).append(", ");
+					}
+				} else {
+					s.append("(null)");
+				}
+				logger.info(s.append("]").toString());
+			}
+		});
+		SensorService.get(this);
+	}
+
+	@Override
+	protected void onResume() {
+		super.onResume();
+		SensorService.get(this).attach();
+	}
+
+	@Override
+	protected void onPause() {
+		super.onPause();
+		SensorService.get(this).detach();
 	}
 }

+ 96 - 0
android/app/src/main/java/knacki/com/androimouse/SensorService.java

@@ -0,0 +1,96 @@
+package knacki.com.androimouse;
+
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+
+import java.util.List;
+import java.util.logging.Logger;
+
+/**
+ * Created by thibault on 6/16/17.
+ */
+public class SensorService {
+	private static SensorService instance = null;
+	private final SensorManager sensorManager;
+	private final static Logger logger = Logger.getLogger(SensorService.class.getName());
+	private final List<Sensor> accelerometerSensors;
+	private final List<Sensor> gravitySensors;
+	/**
+	 * Measures the acceleration force in mm/s2 that is applied to a device on all three physical axes (x, y, and z), including the force of gravity.
+	 */
+	protected float[] latestAccelerometerValue = { 0.f, 0.f, 0.f };
+	protected float[] latestGravityValue = { 0.f, 0.f, 0.f };
+
+	private SensorService(Context c) {
+		sensorManager = (SensorManager) c.getSystemService(Context.SENSOR_SERVICE);
+		accelerometerSensors = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
+		gravitySensors = sensorManager.getSensorList(Sensor.TYPE_GRAVITY);
+	}
+
+	public void attach() {
+		for (Sensor s: accelerometerSensors) {
+			logger.info("Found sensor " +s.getName());
+			sensorManager.registerListener(accelerometerListener, s, SensorManager.SENSOR_DELAY_FASTEST);
+		}
+		for (Sensor s: gravitySensors) {
+			logger.info("Found sensor " +s.getName());
+			sensorManager.registerListener(gravityListener, s, SensorManager.SENSOR_DELAY_FASTEST);
+		}
+	}
+
+	public void detach() {
+		for (Sensor s: accelerometerSensors) {
+			logger.info("Stopping listening sensor " +s.getName());
+			sensorManager.unregisterListener(accelerometerListener, s);
+		}
+	}
+
+	public static SensorService get(Context c) {
+		synchronized (SensorService.class) {
+			if (instance == null) {
+				synchronized (SensorService.class) {
+					instance = new SensorService(c);
+				}
+			}
+		}
+		return instance;
+	}
+
+	public float[] getLatestValue() {
+		float [] result = { 0.f, 0.f, 0.f };
+
+		for (int i =0; i < 3; i++) {
+			result[i] = latestGravityValue[i] - latestAccelerometerValue[i];
+		}
+		return result;
+	}
+
+	private final SensorEventListener accelerometerListener = new SensorEventListener() {
+		@Override
+		public void onSensorChanged(SensorEvent event) {
+			for (int i =0; i < 3; i++) {
+				latestAccelerometerValue[i] = event.values[i] * 1000;
+			}
+		}
+
+		@Override
+		public void onAccuracyChanged(Sensor sensor, int accuracy) {
+		}
+	};
+
+	private final SensorEventListener gravityListener = new SensorEventListener() {
+		@Override
+		public void onSensorChanged(SensorEvent event) {
+			for (int i =0; i < 3; i++) {
+				latestGravityValue[i] = event.values[i] * 1000;
+			}
+		}
+
+		@Override
+		public void onAccuracyChanged(Sensor sensor, int accuracy) {
+		}
+	};
+}

+ 12 - 0
android/app/src/main/res/layout/activity_main.xml

@@ -15,4 +15,16 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Hello World!"/>
+
+    <Button
+        android:text="Button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/textView"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true"
+        android:layout_marginLeft="28dp"
+        android:layout_marginStart="28dp"
+        android:layout_marginTop="29dp"
+        android:id="@+id/button"/>
 </RelativeLayout>