使用加速度计来通知他们是否触摸了手机

时间:2021-05-03 21:24:53

标签: java android

我不熟悉传感器的使用,我无法在触摸手机时通过加速度计激活声音,以便人们可以听到他们触摸了手机。

这是代码,你能不能支持我看看我做错了什么

public class MainActivity extends Activity {


Timer lastTouchedTimer;
MediaPlayer mMediaplayer;
/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SensorEventListener newListener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent sensorEvent) {
            float x = sensorEvent.values[0];
            float y = sensorEvent.values[1];

            if(x > -1.1 && x < 1.1 && y > -1.1 && y < 1.1) {
                if (lastTouchedTimer == null) {
                    lastTouchedTimer = new Timer();
                } else
                    lastTouchedTimer.cancel();
            }
            lastTouchedTimer.schedule(new TimerTask() {
                @Override
                public void run() {
                    try {
                        AssetFileDescriptor afd = getAssets().openFd("beep.wav");
                        mMediaplayer = new MediaPlayer();
                        mMediaplayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                        afd.close();
                        mMediaplayer.prepare();
                        mMediaplayer.start();
                        mMediaplayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                            public void onCompletion(MediaPlayer mp) {
                                //mp.setLooping(false);
                                mp.stop();
                                mp.release();
                            }
                        });
                    } catch(Exception e) {
                        e.printStackTrace();
                    }
                }
            }, 5000);
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int i) {
            //To change body of implemented methods use File | Settings | File Templates.
        }
    };
}
}

1 个答案:

答案 0 :(得分:1)

您需要使用 SensorManager 注册加速度计传感器。

在您的代码中添加类似的内容。

SensorManager sensorsManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
Sensor accelSensor = sensorsManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

sensorsManager.registerListener(newListener, accelSensor,SensorManager.SENSOR_DELAY_FASTEST);