如何获得有关加速度计变化的通知?

时间:2011-09-03 13:11:25

标签: java android accelerometer

我参与了一个神奇的八球风格的应用程序。

简单地向加速度计添加一个监听器的最简单方法是什么?当它改变一个适当的数量(被动摇)时,有什么触发器?

2 个答案:

答案 0 :(得分:2)

查看app-for-android http://code.google.com/p/apps-for-android/

中的惊奇示例游戏

它非常整齐,易于理解。

希望这能帮到你。

答案 1 :(得分:1)

这是我的加速度计代码我需要加速度计播放声音剪辑..... 我在资产文件夹中有“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;
            }

        }
    }
相关问题