我有一个 mp3 文件,我想播放其中的特定单词。我有一个开始时间(6889 毫秒
)和结束时间(7254 毫秒
)。
我有这些代码:
package com.example.playword;
import java.io.IOException;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.widget.TextView;
public class PlayWord extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView tv = new TextView(this);
tv.setText("Playing...");
setContentView(tv);
final MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.nicholas);
try {
mPlayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mPlayer.seekTo(6889); //this is the start time
mPlayer.start();
//how can I end it at 7254 ms?
}
}
最佳答案
最好的方法是使用处理程序来计时停止播放。启动播放器,然后使用处理程序的 postDelayed
安排将停止播放器的 Runnable
的执行。您还应该仅在初始搜索完成后才启动播放器。像这样:
public class PlayWord extends Activity implements MediaPlayer.OnSeekCompleteListener {
Handler mHandler;
MediaPlayer mPlayer;
int mStartTime = 6889;
int mEndTime = 7254;
final Runnable mStopAction = new Runnable() {
@Override
public void run() {
mPlayer.stop();
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TextView tv = new TextView(this);
tv.setText("Playing...");
setContentView(tv);
mHandler = new Handler();
mPlayer = MediaPlayer.create(this, R.raw.nicholas);
mPlayer.setOnSeekCompleteListener(this);
mPlayer.seekTo(mStartTime);
}
@Override
public void onDestroy() {
mPlayer.release();
}
@Override
public void onSeekComplete (MediaPlayer mp) {
mPlayer.start();
mHandler.postDelayed(mStopAction, mEndTime - mStartTime);
}
}
另请注意,您正在使用的 MediaPlayer.create
方法会返回一个已经准备好的 MediaPlayer,prepare
不应再次调用 not就像您在代码中所做的那样。在屏幕上。我还在 Activity 退出时添加了对 release()
的调用。
此外,如果您想在搜索完成时更新 UI,请注意通常从非 UI 线程调用此方法。您将必须使用处理程序来发布任何与 UI 相关的操作。
关于Android:如何在特定毫秒数到来时停止播放媒体(mp3)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5454452/