Browse Source

Initial commit for Sensor related projects.

Cristian Tanas 11 năm trước cách đây
mục cha
commit
dada385c4b
27 tập tin đã thay đổi với 453 bổ sung0 xóa
  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) {
+			
+		}
+	};
+}