Java 使用加速计通知他们是否触碰了手机

Java 使用加速计通知他们是否触碰了手机,java,android,Java,Android,我对传感器的使用还不熟悉,在触摸手机时,我无法通过加速计发出声音,让人听到他们触摸了手机 这是密码你能支持我看看我做错了什么吗 public class MainActivity extends Activity { Timer lastTouchedTimer; MediaPlayer mMediaplayer; /** * Called when the activity is first created. */ @Override public void onCreate(Bund

我对传感器的使用还不熟悉,在触摸手机时,我无法通过加速计发出声音,让人听到他们触摸了手机

这是密码你能支持我看看我做错了什么吗

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.
        }
    };
}
}
公共类MainActivity扩展活动{
计时器lastTouchedTimer;
媒体播放器;
/**
*在首次创建活动时调用。
*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SensorEventListener newListener=新的SensorEventListener(){
@凌驾
传感器更改时的公共无效(传感器事件传感器事件){
浮点x=传感器事件。值[0];
浮动y=传感器事件值[1];
如果(x>-1.1&&x<1.1&&y>-1.1&&y<1.1){
如果(lastTouchedTimer==null){
lastTouchedTimer=新计时器();
}否则
lastTouchedTimer.cancel();
}
lastTouchedTimer.schedule(新时间任务(){
@凌驾
公开募捐{
试一试{
AssetFileDescriptor afd=getAssets().openFd(“beep.wav”);
mMediaplayer=新媒体播放器();
mmediplayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
afd.close();
mmediplayer.prepare();
mmediplayer.start();
mmediplayer.setOnCompletionListener(新的MediaPlayer.OnCompletionListener(){
完成时的公共作废(MediaPlayer mp){
//mp.设置循环(错误);
mp.stop();
mp.release();
}
});
}捕获(例外e){
e、 printStackTrace();
}
}
}, 5000);
}
@凌驾
精度更改时的公共无效(传感器,int i){
//要更改已实现方法的主体,请使用文件|设置|文件模板。
}
};
}
}

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

在代码中添加类似的内容

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

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

请在Englishit's ready Friends中发布该问题。您是否在调试器中对其进行了检查,以查看您的
onCompletion
回调是否被命中?我已经检查了它,但它没有进行回调