android - 如何与自定义媒体播放器一起显示搜索栏

标签 android multithreading media-player seekbar

我已经构建了一个自定义媒体播放器,我还想显示搜索栏。 搜索栏目前正在显示但不起作用,即播放歌曲时它没有进行。让我知道我哪里错了。以下是代码

public class myPlayer extends Activity implements Runnable,SeekBar.OnSeekBarChangeListener {

    MediaPlayer mPlayer;
    Button play,stop;
    SeekBar seekbar;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        seekbar = (SeekBar)findViewById(R.id.seekbar);
        mPlayer = MediaPlayer.create(this,R.raw.sajnave);
        play=(Button)findViewById(R.id.play);
        stop=(Button)findViewById(R.id.stop);
        Toast.makeText(myPlayer.this, ""+mPlayer.getDuration(), Toast.LENGTH_SHORT).show();

        play.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mPlayer.start();

            }

        });

        stop.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(myPlayer.this, ""+mPlayer.getCurrentPosition(), Toast.LENGTH_SHORT).show();
                mPlayer.stop();
            }

        });
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

        int currentPosition = 0;

                int total = mPlayer.getDuration();

                seekbar.setMax(total);

                while (mPlayer != null && currentPosition < total) {

                    try {

                        Thread.sleep(1000);

                        currentPosition = mPlayer.getCurrentPosition();

                    } catch (InterruptedException e) {

                        return;

                    } catch (Exception e) {

                        return;

                    }

                    seekbar.setProgress(currentPosition);

                }

    }

    @Override
    public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
        // TODO Auto-generated method stub
        mPlayer.seekTo(arg1);
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub

    }

}

最佳答案

在 mediplayer 启动后调用 updatePosition() 方法..它适用于我。

private final Handler handler = new Handler();

private final Runnable updatePositionRunnable = new Runnable() {
    public void run() {
        updatePosition();
    }
};

private void updatePosition() {
    handler.removeCallbacks(updatePositionRunnable);
    if (player != null) seekbar.setProgress(player.getCurrentPosition());

    handler.postDelaye(updatePositionRunnable, 500);

}
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
    // TODO Auto-generated method stub
    player.seekTo(arg1);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub

}

关于android - 如何与自定义媒体播放器一起显示搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5259707/

相关文章:

c++ - 媒体停止播放时,媒体播放器会自动停止吗?

android - GPS 位置改变但设备不动

java - PhoneGap 还是 Android 更适合这个应用创意?

android - 从创建的所选颜色的位图中设置墙纸

java - openJdk 升级到 8u292 会破坏我的 aosp 构建系统吗?

java - java中如何获取uint32_t对应的唯一值?

Android MediaPlayer - 在任何给定时间只有一个实例?

c++ - c++中windows-thread异常输出

.net - 比较ProcessThread.Id中的CurrentThread

ios - 必须返回 MPRemoteCommandHandlerStatus 或将完成处理程序作为第二个参数