【发布时间】:2016-03-25 11:34:42
【问题描述】:
我正在尝试使用 AsyncTask 在后台播放的 MediaPlayer 暂停和恢复 mp3 播放。
这是活动代码:
public class MainActivity extends Activity implements SensorEventListener
{
private MyGLSurfaceView mGLSurfaceView2;
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private Sensor mGyro;
BackgroundSound mBackgroundSound = new BackgroundSound();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
this.mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
this.mGyro = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
mGLSurfaceView2 = new MyGLSurfaceView(this);
setContentView(mGLSurfaceView2);
mBackgroundSound.execute();
}
@Override
protected void onResume()
{
super.onResume();
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(this, mGyro, SensorManager.SENSOR_DELAY_NORMAL);
if(mBackgroundSound.player != null)
if(mBackgroundSound.player.isPlaying()==false)
mBackgroundSound.player.start();
mGLSurfaceView2.onResume();
}
@Override
protected void onPause()
{
super.onPause();
mSensorManager.unregisterListener(this);
if(mBackgroundSound.player.isPlaying())
{
mBackgroundSound.player.pause();
}
mBackgroundSound.player.release();
// mBackgroundSound.cancel(true);
mGLSurfaceView2.onPause();
}
public class BackgroundSound extends AsyncTask<Void, Void, Void> {
MediaPlayer player;
@Override
protected Void doInBackground(Void... params) {
AssetFileDescriptor afd;
player = new MediaPlayer();
try {
afd = getAssets().openFd("2/sound.mp3");
if (afd != null) {
player.setDataSource(afd.getFileDescriptor());
player.prepare();
player.setLooping(true);
player.setVolume(1.0f, 1.0f);
//player.start();
} else {
Log.i("Error", "afd is null.");
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
}
logcat 错误:
E/MediaPlayer: start called in state 1
E/MediaPlayer: error (-38, 0)
E/MediaPlayer: Error (-38,0)
如果我将mBackgroundSound.execute(); 移动到onResume(),mp3 开始播放,但onResume() 在第二次执行时显然失败了(恢复应用程序时)。
我需要帮助将以下命令放入正确的方法中以使其正常工作(当 APP 最小化时 MP3 暂停,并在 APP 再次恢复时恢复或重新启动):
mBackgroundSound.execute();
mBackgroundSound.cancel(true);
mBackgroundSound.player.start();
mBackgroundSound.player.pause();
mBackgroundSound.player.release();
谢谢!
【问题讨论】:
标签: java android android-asynctask android-mediaplayer