java - 如何获得有关加速度计更改的通知?

标签 java android accelerometer

我正在开发一个神奇的八球式应用程序。

简单地向加速度计添加监听器并在它发生适当变化(被摇动)时触发某些东西的最简单方法是什么?

最佳答案

这是我的加速度计代码,我需要加速度计播放声音 fragment ...... 我在 Assets 文件夹中有“gavel_single.wav”环......它工作正常

I also send some references...
    http://developer.android.com/resources/samples/AccelerometerPlay/index.html
my code    
    import android.app.Activity;
    import android.content.res.AssetFileDescriptor;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.media.MediaPlayer;
    import android.media.MediaPlayer.OnCompletionListener;
    import android.os.Bundle;

    public class SensorTest extends Activity implements SensorEventListener {
        private SensorManager sensorManager;
        private boolean color = false;
        private long lastUpdate;
        private MediaPlayer mMediaplayer;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
            sensorManager.registerListener(this, sensorManager
                    .getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                    SensorManager.SENSOR_DELAY_NORMAL);
            lastUpdate = System.currentTimeMillis();
        }

        public void onSensorChanged(SensorEvent event) {
            if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
                float[] values = event.values;
                // Movement
                float x = values[0];
                float y = values[1];
                float z = values[2];

                float accelationSquareRoot = (x * x + y * y + z * z)
                        / (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH);
                long actualTime = System.currentTimeMillis();
                if (accelationSquareRoot >= 2) //
                {
                    if (actualTime - lastUpdate < 200) {
                        return;
                    }
                    lastUpdate = actualTime;

                    if (color) {

                    } else {
                        try {

                            AssetFileDescriptor afd = getAssets().openFd(
                                    "gavel_single.wav");
                            mMediaplayer = new MediaPlayer();
                            mMediaplayer.setDataSource(afd.getFileDescriptor(), afd
                                    .getStartOffset(), afd.getLength());
                            afd.close();
                            mMediaplayer.prepare();
                            mMediaplayer.start();

                            mMediaplayer
                                    .setOnCompletionListener(new OnCompletionListener() {

                                        public void onCompletion(MediaPlayer mp) {
                                            mp.stop();
                                            mp.release();

                                        }
                                    });

                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }

                }

            }

        }

        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // TODO Auto-generated method stub

        }

        @Override
        protected void onResume() {
            super.onResume();
            // register this class as a listener for the orientation and
            // accelerometer sensors
            sensorManager.registerListener(this, sensorManager
                    .getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                    SensorManager.SENSOR_DELAY_NORMAL);
        }

        @Override
        protected void onPause() {
            // unregister listener
            sensorManager.unregisterListener(this);
            super.onStop();
        }

        @Override
        protected void onDestroy() {

            super.onDestroy();
            if (mMediaplayer != null) {
                mMediaplayer.release();
                mMediaplayer = null;
            }

        }
    }

关于java - 如何获得有关加速度计更改的通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293299/

相关文章:

java - 如何优化这个循环?

java - 如何向对象类添加信息?

java - 在 Java 中检查对象是否为 null

android - 从 USB 可移动存储读取文件

accelerometer - 使用原始加速度计和磁力计数据计算磁航向

javascript - 如何使用传感器值检测设备方向?

java - 顶点抛出 IllegalStateException : Response has already been written

android - 阅读三星和其他OEM暗/夜模式系统设置

android - 如何在 React Native 启动画面后禁用后退按钮