我认为一个计时器会很好地为你工作。也许这样的事情,在这里取消计时器并开始一个新的计时器每次检测运动时间:
在您的活动定义定时器(并确保你取消它,当你离开活动)
Timer lastTouchedTimer = null;
然后改变你的onSensorChanged这样的:
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
if(x > -0.1 && x < 0.1 && y > -0.1 && y < 0.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);
}
}
这里是一个活动,我在一个样本活动使用。
package com.example.test;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.media.MediaPlayer;
import android.os.Bundle;
import java.util.Timer;
import java.util.TimerTask;
public class MyActivity 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.main);
SensorEventListener newListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float x = sensorEvent.values[0];
float y = sensorEvent.values[1];
if(x > -0.1 && x < 0.1 && y > -0.1 && y < 0.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.
}
};
}
}
它使用了非常简单的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Heallo World, MyActivity"
/>
</LinearLayout>
我想你的方法,但后来我的应用程序甚至无法知道open..Do为什么? – athpapa 2013-04-07 20:15:17
至少有一个小错字。我编辑了我的回复,并从我写的小样本中收录了我的活动。我不知道为什么你的应用程序没有加载,但我知道这是一个。 – HalR 2013-04-07 21:25:55