Lia*_*ell 4 audio android media-player
我想播放声音.它第一次运行良好,但如果我停止它并想重新启动它没有任何反应......任何想法?
final MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sex);
ImageButton andvib = (ImageButton)findViewById(R.id.vib_toggle);
final AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
andvib.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
am.setStreamVolume(AudioManager.STREAM_MUSIC, vol, 0);
Vibrator vibr = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
vibr.cancel();
if(vibrating==false) {
if(style == 0)
vibr.vibrate(durat, 0);
if(style == 1){
vibr.vibrate(staccato, 0);
}
if(style == 2){
vibr.vibrate(wild, 0);
}
try {
mp.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mp.start();
mp.setLooping(true);
vibrating = true;
}
else {
vibrating = false;
mp.stop();
try {
mp.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
vibr.cancel();
}
}
});
Run Code Online (Sandbox Code Playgroud)
使用MediaPlayer时,您应该始终参考您可以在此处看到的状态更改图:
http://developer.android.com/reference/android/media/MediaPlayer.html
从图中可以看出,在MediaPlayer上调用stop()后,它会进入Stopped状态,你需要再次调用prepare()将其调用Prepared状态,然后再调用play().
请记住,准备工作可能需要很长时间,因此这样做可能会导致糟糕的用户体验,尤其是当您从主线程执行此操作时(UI将在MediaPlayer准备时冻结).如果你经常播放声音,你应该只准备()一次,然后始终保持在Started,Paused或PlaybackCompleted状态.
Bruno Oliveira,Google开发人员项目工程师
| 归档时间: |
|
| 查看次数: |
5332 次 |
| 最近记录: |