【问题标题】:why wont my Gyroscope app in android fire off any events?为什么我在 android 中的 Gyroscope 应用程序不会触发任何事件?
【发布时间】:2011-06-09 23:01:21
【问题描述】:

好吧,我是 android 编程新手,我认为我做错了什么,但我不知道是什么。我查看了 3 个不同的教程,我的代码看起来像他们的。谁能告诉我我做错了什么?这是我的 src(从 android nehe 教程修改而来)。

package cypri.games;


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.opengl.GLSurfaceView;
import android.os.Bundle;
import android.util.Log;

/**
 * The initial Android Activity, setting and initiating
 * the OpenGL ES Renderer Class @see Lesson02.java
 * 
 * @author Savas Ziplies (nea/INsanityDesign)
 */
public class DGearActivity extends Activity {

    /** The OpenGL View */
    private GLSurfaceView glSurface;
    DGear dGear = new DGear();

    private static final String TAG = "DEBUG";

    SensorManager sensorManager;
    private final SensorEventListener sensorListener = new SensorEventListener(){
        public void onSensorChanged(SensorEvent se) {
             if (se.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
                 dGear.playerX = se.values[0];
                 Log.v(TAG, "se.values[0] =" + se.values[0]);
             }
        }

        public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }
    };

    /**
     * Initiate the OpenGL View and set our own
     * Renderer (@see Lesson02.java)
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        sensorManager.registerListener(sensorListener, sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_GAME);

        //Create an Instance with this Activity
        glSurface = new GLSurfaceView(this);
        //Set our own Renderer
        glSurface.setRenderer(dGear);
        //Set the GLSurface as View to this Activity
        setContentView(glSurface);
    }

    /**
     * Remember to resume the glSurface
     */
    @Override
    protected void onResume() {
        Log.v(TAG, "or");
        super.onResume();
        glSurface.onResume();
        sensorManager.registerListener(sensorListener, sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_GAME);
    }

    /**
     * Also pause the glSurface
     */
    @Override
    protected void onPause() {
        super.onPause();
        glSurface.onPause();
        Log.v(TAG, "op");
        sensorManager.unregisterListener(sensorListener);
    }

}

【问题讨论】:

  • 您在日志中看到什么了吗?是什么让你相信它不起作用?
  • 在 logcat 日志中没有看到 se.values[0] 但我看到了 onResume (or) 和 on Pause (op) 的日志
  • 您是否需要获得使用陀螺仪的权限,如果需要,您是否将其添加到您的应用程序清单中?

标签: java android events gyroscope


【解决方案1】:
  1. 您是在模拟器还是在实际设备上运行它?
  2. 如果您在实际设备上运行它,您确定它有陀螺仪吗?有lots of different sensor types,陀螺仪只是其中之一。它很可能是其中之一。

如果它是陀螺仪类型,则不要只写入日志,而是尝试在该事件触发时写入 se.sensor 的名称。这样你至少会知道事件正在触发。

【讨论】:

  • 我应该研究更多。我的手机没有陀螺仪。我使用加速器获得了预期的效果。
猜你喜欢
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 2022-08-17
  • 2012-05-12
  • 2011-06-24
相关资源
最近更新 更多