我怎样才能得到通知的加速度变化? [英] How can I get notified on accelerometer changes?

查看:176
本文介绍了我怎样才能得到通知的加速度变化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一个神奇的八球风格的应用程序。

I work on a magic eight ball style application.

什么是一个简单的监听器添加到加速度计的最简单的方法,当它改变一个像样的数目(摇动),有什么东西触发?

What is the easiest way to simply add a listener to the accelerometer, and when it changes a decent amount (being shaken), to have something trigger?

推荐答案

下面是我的code为加速度计,我有需要加速播放声音片段.....
我有gavel_single.wav篮圈资源文件夹......它的正常工作

Here is my code for accelerometer i have require accelerometer play sound clip..... I have "gavel_single.wav" ring in asset folder......Its work properly

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;
            }

        }
    }

这篇关于我怎样才能得到通知的加速度变化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆