Переглянути джерело

Initial commit for Sensor related projects.

Cristian Tanas 11 роки тому
батько
коміт
dada385c4b
27 змінених файлів з 453 додано та 0 видалено
  1. 27 0
      SensorsAccelerometerRaw/AndroidManifest.xml
  2. BIN
      SensorsAccelerometerRaw/ic_launcher-web.png
  3. BIN
      SensorsAccelerometerRaw/libs/android-support-v4.jar
  4. BIN
      SensorsAccelerometerRaw/res/drawable-hdpi/ic_launcher.png
  5. BIN
      SensorsAccelerometerRaw/res/drawable-mdpi/ic_launcher.png
  6. BIN
      SensorsAccelerometerRaw/res/drawable-xhdpi/ic_launcher.png
  7. BIN
      SensorsAccelerometerRaw/res/drawable-xxhdpi/ic_launcher.png
  8. 35 0
      SensorsAccelerometerRaw/res/layout/activity_main.xml
  9. 11 0
      SensorsAccelerometerRaw/res/values-v11/styles.xml
  10. 12 0
      SensorsAccelerometerRaw/res/values-v14/styles.xml
  11. 7 0
      SensorsAccelerometerRaw/res/values/strings.xml
  12. 20 0
      SensorsAccelerometerRaw/res/values/styles.xml
  13. 94 0
      SensorsAccelerometerRaw/src/org/uab/android/sensors/accelerometerraw/MainActivity.java
  14. 27 0
      SensorsCompass/AndroidManifest.xml
  15. BIN
      SensorsCompass/ic_launcher-web.png
  16. BIN
      SensorsCompass/libs/android-support-v4.jar
  17. BIN
      SensorsCompass/res/drawable-hdpi/bluepointer.png
  18. BIN
      SensorsCompass/res/drawable-hdpi/ic_launcher.png
  19. BIN
      SensorsCompass/res/drawable-mdpi/ic_launcher.png
  20. BIN
      SensorsCompass/res/drawable-xhdpi/ic_launcher.png
  21. BIN
      SensorsCompass/res/drawable-xxhdpi/ic_launcher.png
  22. 16 0
      SensorsCompass/res/layout/activity_main.xml
  23. 11 0
      SensorsCompass/res/values-v11/styles.xml
  24. 12 0
      SensorsCompass/res/values-v14/styles.xml
  25. 8 0
      SensorsCompass/res/values/strings.xml
  26. 20 0
      SensorsCompass/res/values/styles.xml
  27. 153 0
      SensorsCompass/src/org/uab/android/sensors/compass/MainActivity.java

+ 27 - 0
SensorsAccelerometerRaw/AndroidManifest.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.uab.android.sensors.accelerometerraw"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="14"
+        android:targetSdkVersion="19" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

BIN
SensorsAccelerometerRaw/ic_launcher-web.png


BIN
SensorsAccelerometerRaw/libs/android-support-v4.jar


BIN
SensorsAccelerometerRaw/res/drawable-hdpi/ic_launcher.png


BIN
SensorsAccelerometerRaw/res/drawable-mdpi/ic_launcher.png


BIN
SensorsAccelerometerRaw/res/drawable-xhdpi/ic_launcher.png


BIN
SensorsAccelerometerRaw/res/drawable-xxhdpi/ic_launcher.png


+ 35 - 0
SensorsAccelerometerRaw/res/layout/activity_main.xml

@@ -0,0 +1,35 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="${relativePackage}.${activityClass}" >
+
+    <TextView
+        android:id="@+id/xvalue"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:layout_marginLeft="20dp"
+        android:layout_marginTop="54dp"
+        android:textSize="24sp" />
+
+    <TextView
+        android:id="@+id/yvalue"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignLeft="@+id/xvalue"
+        android:layout_below="@+id/xvalue"
+        android:layout_marginTop="18dp"
+        android:textSize="24sp" />
+
+    <TextView
+        android:id="@+id/zvalue"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignLeft="@+id/yvalue"
+        android:layout_below="@+id/yvalue"
+        android:layout_marginTop="18dp"
+        android:textSize="24sp" />
+
+</RelativeLayout>

+ 11 - 0
SensorsAccelerometerRaw/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
SensorsAccelerometerRaw/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 7 - 0
SensorsAccelerometerRaw/res/values/strings.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">SensorsAccelerometerRaw</string>
+    <string name="hello_world">Hello world!</string>
+
+</resources>

+ 20 - 0
SensorsAccelerometerRaw/res/values/styles.xml

@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>

+ 94 - 0
SensorsAccelerometerRaw/src/org/uab/android/sensors/accelerometerraw/MainActivity.java

@@ -0,0 +1,94 @@
+package org.uab.android.sensors.accelerometerraw;
+
+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.Bundle;
+import android.widget.TextView;
+
+public class MainActivity extends Activity {
+	
+	SensorManager	sensorManager;
+	Sensor			sensorAccelerometer;
+	
+	static final long 	UPDATE_THRESHOLD = 500;
+	long				lastUpdate;
+
+	TextView	accelerometerXValue;
+	TextView	accelerometerYValue;
+	TextView	accelerometerZValue;
+	
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_main);
+		
+		accelerometerXValue = (TextView) findViewById(R.id.xvalue);
+		accelerometerYValue = (TextView) findViewById(R.id.yvalue);
+		accelerometerZValue = (TextView) findViewById(R.id.zvalue);
+		
+		// Get a reference to the SensorManager
+		sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
+		
+		// Get a reference to the accelerometer
+		sensorAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+		if ( sensorAccelerometer == null ) finish();
+	}
+	
+	@Override
+	protected void onResume() {
+		super.onResume();
+		
+		// Register a listener to obtain accelerometer measurements
+		sensorManager.registerListener(
+				accelerometerListener, 				// SensorEventListener interface implementation
+				sensorAccelerometer, 				// Sensor to register the listener for
+				SensorManager.SENSOR_DELAY_UI		// Sensor data update rate
+				);
+		
+		lastUpdate = System.currentTimeMillis();
+	}
+	
+	@Override
+	protected void onPause() {
+		super.onPause();
+		
+		// Unregister the SensorEventListener
+		sensorManager.unregisterListener(accelerometerListener);
+	}
+	
+	SensorEventListener accelerometerListener = new SensorEventListener() {
+		
+		@Override
+		public void onSensorChanged(SensorEvent event) {
+			
+			// A new reading has been obtained
+			if ( event.sensor.getType() == Sensor.TYPE_ACCELEROMETER ) {
+				
+				// Refresh the display only if a certain time has passed since the last reading
+				long currentTime = System.currentTimeMillis();
+				if ( currentTime - lastUpdate > UPDATE_THRESHOLD ) {
+					
+					lastUpdate = currentTime;
+					
+					float rawX = event.values[0];		// Acceleration force along the X axis (including gravity (m/s2)
+					float rawY = event.values[1];		// Acceleration force along the Y axis (including gravity (m/s2)
+					float rawZ = event.values[2];		// Acceleration force along the Z axis (including gravity (m/s2)
+					
+					accelerometerXValue.setText("Accelerometer X-axis value: " + String.valueOf(rawX));
+					accelerometerYValue.setText("Accelerometer Y-axis value: " + String.valueOf(rawY));
+					accelerometerZValue.setText("Accelerometer Z-axis value: " + String.valueOf(rawZ));
+				}
+			}
+			
+		}
+		
+		@Override
+		public void onAccuracyChanged(Sensor sensor, int accuracy) {
+			
+		}
+	};
+}

+ 27 - 0
SensorsCompass/AndroidManifest.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.uab.android.sensors.compass"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="14"
+        android:targetSdkVersion="19" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

BIN
SensorsCompass/ic_launcher-web.png


BIN
SensorsCompass/libs/android-support-v4.jar


BIN
SensorsCompass/res/drawable-hdpi/bluepointer.png


BIN
SensorsCompass/res/drawable-hdpi/ic_launcher.png


BIN
SensorsCompass/res/drawable-mdpi/ic_launcher.png


BIN
SensorsCompass/res/drawable-xhdpi/ic_launcher.png


BIN
SensorsCompass/res/drawable-xxhdpi/ic_launcher.png


+ 16 - 0
SensorsCompass/res/layout/activity_main.xml

@@ -0,0 +1,16 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="${relativePackage}.${activityClass}" >
+
+    <ImageView
+        android:id="@+id/compassPointer"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerHorizontal="true"
+        android:layout_centerVertical="true"
+        android:src="@drawable/bluepointer"
+        android:contentDescription="@string/compass" />
+
+</RelativeLayout>

+ 11 - 0
SensorsCompass/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
SensorsCompass/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 8 - 0
SensorsCompass/res/values/strings.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">SensorsCompass</string>
+    <string name="hello_world">Hello world!</string>
+    <string name="compass">Compass pointer</string>
+
+</resources>

+ 20 - 0
SensorsCompass/res/values/styles.xml

@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>

+ 153 - 0
SensorsCompass/src/org/uab/android/sensors/compass/MainActivity.java

@@ -0,0 +1,153 @@
+package org.uab.android.sensors.compass;
+
+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.Bundle;
+import android.view.animation.Animation;
+import android.view.animation.RotateAnimation;
+import android.widget.ImageView;
+
+public class MainActivity extends Activity {
+	
+	SensorManager	sensorManager;
+	Sensor			sensorAccelerometer;
+	Sensor			sensorGeomagneticField;
+	
+	ImageView	compassPointer;
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_main);
+		
+		compassPointer = (ImageView) findViewById(R.id.compassPointer);
+		
+		// Get a reference to the SensorManager
+		sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
+		
+		// Get a reference to the accelerometer and magnetometer
+		sensorAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+		sensorGeomagneticField = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
+		
+		// Exit unless both sensors are available
+		if ( sensorAccelerometer == null || sensorGeomagneticField == null ) {
+			finish();
+		}
+	}
+	
+	@Override
+	protected void onResume() {
+		super.onResume();
+		
+		// Register for sensor updates
+		sensorManager.registerListener(
+				accelerometerAndMagnetometerListener, 
+				sensorAccelerometer, 
+				SensorManager.SENSOR_DELAY_UI
+				);
+		
+		sensorManager.registerListener(
+				accelerometerAndMagnetometerListener, 
+				sensorGeomagneticField, 
+				SensorManager.SENSOR_DELAY_UI
+				);
+	}
+	
+	@Override
+	protected void onPause() {
+		super.onPause();
+		
+		// Unregister all sensors
+		sensorManager.unregisterListener(accelerometerAndMagnetometerListener);
+	}
+	
+	
+	SensorEventListener accelerometerAndMagnetometerListener = new SensorEventListener() {
+		
+		float[] accelerometerValues;
+		float[] magneticFieldValues;
+		
+		float currentDegrees = 0f;
+		
+		@Override
+		public void onSensorChanged(SensorEvent event) {
+			
+			// Acquire accelerometer event data
+			
+			if ( event.sensor.getType() == Sensor.TYPE_ACCELEROMETER ) {
+				
+				accelerometerValues = event.values;	 
+			}
+			
+			// Acquire geomagnetic field event data
+			
+			else if ( event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD ) {
+				
+				magneticFieldValues = event.values;
+			}
+			
+			// If we have readings from both sensors then use the readings to compute
+			// the device's orientation and then update the display.
+			
+			if ( accelerometerValues != null && magneticFieldValues != null ) {
+				
+				float[] rotationMatrix = new float[9];
+				
+				// Use the accelerometer and magnetometer readings to compute the device's
+				//  rotation with respect to a real world coordinate system.
+				
+				boolean success = SensorManager.getRotationMatrix(
+						rotationMatrix, 		// Rotation matrix
+						null, 					// Inclination matrix
+						accelerometerValues, 	// Accelerometer values
+						magneticFieldValues		// Magnetic field values
+						);
+				
+				if ( success ) {
+					
+					float[] orientationMatrix = new float[3];
+					
+					// Returns the device's orientation given the rotation matrix
+					
+					SensorManager.getOrientation(rotationMatrix, orientationMatrix);
+					
+					// Get the rotation, measured in radians, around the Z-axis
+					// Note: this assumes the device is held flat and parallel to the ground
+					
+					float azimuthInRadians = orientationMatrix[0];
+					
+					// Convert from radians to degrees
+					float azimuthInDegrees = (float) Math.toDegrees(azimuthInRadians);
+					
+					// Create an Animation for the compass pointer
+					RotateAnimation rotateAnim = new RotateAnimation(
+							currentDegrees, 
+							-azimuthInDegrees, 
+							Animation.RELATIVE_TO_SELF, 
+							.5f, 
+							Animation.RELATIVE_TO_SELF, 
+							.5f
+							);
+					rotateAnim.setDuration(250);
+					rotateAnim.setFillAfter(true);
+					
+					// Animate the ImageView holding the compass pointer
+					compassPointer.setAnimation(rotateAnim);
+					currentDegrees = -azimuthInDegrees;
+					
+					// Reset sensor data arrays
+					accelerometerValues = magneticFieldValues = null;
+				}
+			}
+		}
+		
+		@Override
+		public void onAccuracyChanged(Sensor sensor, int accuracy) {
+			
+		}
+	};
+}