如何在android上获取加速度计数据

时间:2014-02-12 23:26:41

标签: android accelerometer android-sensors

我目前有一个Android应用程序,它有一个加速度计,我想收集数据并将其放入数据库,有谁知道如何做到这一点?我是android的初学者,我在这方面遇到了一些麻烦。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

1)AccelerometerActivity.java

import android.app.Activity;
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 AccelerometerActivity extends Activity implements SensorEventListener {
    private SensorManager sensorManager;

    TextView xCoor; // declare X axis object
    TextView yCoor; // declare Y axis object
    TextView zCoor; // declare Z axis object

    @Override
    public void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        xCoor=(TextView)findViewById(R.id.xcoor); // create X axis object
        yCoor=(TextView)findViewById(R.id.ycoor); // create Y axis object
        zCoor=(TextView)findViewById(R.id.zcoor); // create Z axis object

        sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
        // add listener. The listener will be  (this) class
        sensorManager.registerListener(this, 
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_NORMAL);


    }

    public void onAccuracyChanged(Sensor sensor,int accuracy){

    }

    public void onSensorChanged(SensorEvent event){

        // check sensor type
        if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){

            // assign directions
            float x=event.values[0];
            float y=event.values[1];
            float z=event.values[2];

            xCoor.setText("X: "+x);
            yCoor.setText("Y: "+y);
            zCoor.setText("Z: "+z);
        }
    }
}

<强> 2。布局:main.xml:

?xml version="1.0" encoding="utf-8"?>
<TableLayout    
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TableRow>
    <TextView 
        android:id="@+id/xcoor"
        android:text="X Coordinate: "
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    />
    </TableRow>

    <TableRow>
    <TextView 
        android:id="@+id/ycoor"
        android:text="Y Coordinate: "
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    />
    </TableRow>

    <TableRow>
    <TextView 
        android:id="@+id/zcoor"
        android:text="Z Coordinate: "
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    />
    </TableRow>

</TableLayout>

3)Manifest(AndroidManifest.xml)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.accelerometeractivity"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="13" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">

        <activity android:name=".AccelerometerActivity"
                  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>

4)结果

enter image description here

答案 1 :(得分:1)

添加到Ziprox09的答案:

根据android文档http://developer.android.com/reference/android/hardware/SensorEvent.html

"The coordinate-system is defined relative to the screen of the phone in its default orientation. The axes are not swapped when the device's screen orientation changes."

使用NVidia提供的解决方案来处理设备默认方向问题:https://stackoverflow.com/a/14313663/1489493

答案 2 :(得分:0)

如果您不知道如何在Android中处理加速度计或陀螺仪检查Motion Sensors。你也可以在谷歌找到很多样本。