我是Android编程的新手,我正在构建一个简单的应用程序,当您翻转手机时,使用SensorListener
加速度计从本地文件播放声音。此外,还有一个带有咔嗒声监听器的图像,触摸时也会播放相同的声音。
我的代码有以下顺序:
onCreate
和onRestart
- 为本地文件调用MediaPlayer.create()
。
onDestroy
- 调用MediaPlayer.release
并将引用设置为null。
我正在手机上调试应用程序,因为模拟器不支持加速度计。
当我点击图片时,我在Logcat中收到start called in state 64
错误,当我翻转手机时,调用NullPointerException
的{{1}}的应用FC会被调用。
我对MediaPlayer文档中的工作原理的理解是,您必须致电mp.start()
,然后在启动或停止播放器之前调用create()
。步骤顺序是否有问题?
我也尝试在prepare()
发布媒体播放器,但无济于事。
我有加速度计的以下传感器监听器(mp是onStop
对象) -
MediaPlayer
..以及按钮的以下点击监听器 -
private final SensorEventListener accelerometerListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent arg0) {
float z_value = arg0.values[2];
if (z_value < 0 && playerReady) {
mp.start(); // <-- NullPointerException thrown here.
} else {
mp.stop();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
我还为媒体播放器写了一个 private final View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (playerReady) {
mp.start();
}
}
};
(设置上面看到的onPreparedListener
)
playerReady
修改以下是 private final OnPreparedListener opl = new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
playerReady = true;
}
};
和onCreate()
-
onRestart()