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
回调是否被命中?我已经检查了它,但它没有进行回调