Android:如何在特定毫秒数到来时停止播放媒体(mp3)?

标签 android media-player

我有一个 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/

相关文章:

java - 如何删除 xmlpullparser 中的 <p> 标签

android - 如何以不阻止滚动和点击它的子项目的方式在 Android ScrollView 中启用缩放?

java - 安卓网络驱动程序。 XMLHttpRequest 无法加载 'URL' 。 Access-Control-Allow-Origin 不允许 Origin 'URL'。在空 :1

android - 音量变化监听器 : Is registerMediaButtonEventReceiver preferable to onKeyDown?

Android:有没有办法更改 MediaPlayer 网址?

java - 空指针异常 Java

java - Android:addContentView() 在屏幕状态改变之前不会出现

c# - 使用 MediaPlayer C# 从数据库播放声音

android - MediaPlayer setDataSource 需要最佳实践建议

java - Android 媒体播放器从 res/raw 播放 .ogg 文件时出现错误 (-4 -4)