手机中获取陀螺仪的数据

package com.example.yanglin.myapplication;

/**
 * Created by yanglin on 2018/10/7.
 */
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.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import java.util.List;
public class TestSensor extends Activity implements SensorEventListener{
    private SensorManager sensorManager = null;
    private Sensor gyroSensor = null;
    private TextView vX;
    private TextView vY;
    private TextView vZ;
    private TextView v;
    private Button button;
    private static final float NS2S = 1.0f / 1000000000.0f;
    private float timestamp;
    private float[] angle = new float[3];
    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test1);
        vX = (TextView) findViewById(R.id.vx);
        vY = (TextView)findViewById(R.id.vy);
        vZ = (TextView)findViewById(R.id.vz);
        v = (TextView)findViewById(R.id.v);
        button = (Button)findViewById(R.id.button);
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        gyroSensor = sensorManager
                .getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        vX.setText("!!!!!!");
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
// TODO Auto-generated method stub
//声明可变字符串
                StringBuffer sb = new StringBuffer();
//获取手机全部的传感器
                List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
//迭代输出获得上的传感器

                for (Sensor sensor : sensors) {
                    sb.append(sensor.getName().toString());
                    sb.append("\n");
                    Log.i("传感器", sensor.getName().toString());
                }
//给文本控件赋值
                v.setText(sb.toString());
            }
        });
    }
    public TestSensor() {
// TODO Auto-generated constructor stub
        angle[0] = 0;
        angle[1] = 0;
        angle[2] = 0;
        timestamp = 0;
    }

    @Override
    protected void onPause() {
// TODO Auto-generated method stub
        super.onPause();
        sensorManager.unregisterListener(this); // 解除监听器注册
    }
    @Override
    protected void onResume() {
// TODO Auto-generated method stub
        super.onResume();
        sensorManager.registerListener(this, gyroSensor,
                SensorManager.SENSOR_DELAY_NORMAL); //为传感器注册监听器
    }
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub

    }
    @Override
    public void onSensorChanged(SensorEvent event) {

        if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
            showInfo("事件:" + " x:" + event.values[0] + " y:" + event.values[1] + " z:" + event.values[2]);

        vX.setText("Gyroscope X: " + event.values[0]);
        vY.setText("Gyroscope Y: " + event.values[1]);
        vZ.setText("Gyroscope Z: " + event.values[2]);
        }
    }
    private void showInfo(String info){
        Log.e("陀螺仪",info);}
}
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context=".Test1"
    >


    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取传感器"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/v"
        android:textSize="30px"
        ></TextView>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/vx"
        android:textSize="50px"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/vy"
        android:textSize="50px"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/vz"
        android:textSize="50px"
        />

</LinearLayout>

 

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
获取手机陀螺仪数据需要使用手机的传感器API。在C语言,可以使用Android NDK编写Native代码来访问传感器API。 下面是一个简单的示例代码,演示如何获取陀螺仪数据: ``` #include <jni.h> #include <android/sensor.h> ASensorManager* sensorManager; const ASensor* gyroscopeSensor; ASensorEventQueue* sensorEventQueue; JNIEXPORT void JNICALL Java_com_example_MyActivity_initSensors(JNIEnv *env, jobject obj) { // 获取传感器管理器 sensorManager = ASensorManager_getInstance(); // 获取陀螺仪传感器 gyroscopeSensor = ASensorManager_getDefaultSensor(sensorManager, ASENSOR_TYPE_GYROSCOPE); // 创建传感器事件队列 sensorEventQueue = ASensorManager_createEventQueue(sensorManager, ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS), 0, NULL, NULL); // 注册陀螺仪传感器事件监听器 ASensorEventQueue_enableSensor(sensorEventQueue, gyroscopeSensor); ASensorEventQueue_setEventRate(sensorEventQueue, gyroscopeSensor, 1000000 / 60); } JNIEXPORT void JNICALL Java_com_example_MyActivity_releaseSensors(JNIEnv *env, jobject obj) { // 停止监听陀螺仪传感器事件 ASensorEventQueue_disableSensor(sensorEventQueue, gyroscopeSensor); // 销毁传感器事件队列 ASensorManager_destroyEventQueue(sensorManager, sensorEventQueue); } JNIEXPORT void JNICALL Java_com_example_MyActivity_getGyroscopeData(JNIEnv *env, jobject obj, jfloatArray data) { ASensorEvent event; while (ASensorEventQueue_getEvents(sensorEventQueue, &event, 1) > 0) { if (event.type == ASENSOR_TYPE_GYROSCOPE) { jfloat buffer[3]; buffer[0] = event.data[0]; buffer[1] = event.data[1]; buffer[2] = event.data[2]; // 将陀螺仪数据复制到Java数组 (*env)->SetFloatArrayRegion(env, data, 0, 3, buffer); } } } ``` 这段代码可以在Java代码调用,如下所示: ``` public class MyActivity extends Activity { static { System.loadLibrary("native-lib"); } public native void initSensors(); public native void releaseSensors(); public native void getGyroscopeData(float[] data); private SensorManager sensorManager; private Sensor gyroscopeSensor; private float[] gyroscopeData = new float[3]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); initSensors(); sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); gyroscopeSensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); } @Override protected void onResume() { super.onResume(); sensorManager.registerListener(sensorEventListener, gyroscopeSensor, SensorManager.SENSOR_DELAY_GAME); } @Override protected void onPause() { super.onPause(); sensorManager.unregisterListener(sensorEventListener); } @Override protected void onDestroy() { super.onDestroy(); releaseSensors(); } private SensorEventListener sensorEventListener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) { // 获取陀螺仪数据 getGyroscopeData(gyroscopeData); // 处理陀螺仪数据 // ... } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; } ``` 这段Java代码获取陀螺仪传感器的数据,并将数据传递给Native代码处理。Native代码将数据复制到Java数组,然后Java代码再从数组获取数据进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值