当前位置: 首页 > 知识库问答 >
问题:

Android媒体播放器从停止位置搜索播放

哈沛
2023-03-14

我试图通过使用寻求酒吧听众播放一首歌。但是当我尝试拖动进度条时,它会从歌曲的开头播放。它需要从那个被拖动的位置演奏。

这是我的代码:

public class MainActivity extends Activity {

    private TextView prairText;
    private AssetFileDescriptor descriptor;
    private SeekBar seekBar;
    private MediaPlayer mp = new MediaPlayer();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Keep screen active
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        findViewById(R.id.play_button).setVisibility(View.INVISIBLE);
        findViewById(R.id.pauseButton).setVisibility(View.VISIBLE);

        init();

        // Play prayer
        /*if (mp != null) {
            mp.start();
        }*/

        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if (mp != null && fromUser) {
                    mp.seekTo(progress * 1000);
                }

            }
        });
        findViewById(R.id.play_button).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mp != null) {
                    mp.start();
                    final Handler mHandler = new Handler();
                    //Make sure you update Seekbar on UI thread
                    MainActivity.this.runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            if(mp != null){
                                int mCurrentPosition = mp.getCurrentPosition() / 1000;
                                seekBar.setProgress(mCurrentPosition);
                            }
                            mHandler.postDelayed(this, 1000);
                        }
                    });
                    findViewById(R.id.play_button).setVisibility(View.INVISIBLE);
                    findViewById(R.id.pauseButton).setVisibility(View.VISIBLE);
                }
            }
        });

        findViewById(R.id.pauseButton).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (mp != null) {
                    mp.pause();
                    findViewById(R.id.pauseButton).setVisibility(View.INVISIBLE);
                    findViewById(R.id.play_button).setVisibility(View.VISIBLE);
                }
                mp.pause();
            }
        });
        findViewById(R.id.restart_button).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (mp != null) {
                    mp.seekTo(0);
                    mp.start();
                    findViewById(R.id.play_button).setVisibility(View.INVISIBLE);
                    findViewById(R.id.pauseButton).setVisibility(View.VISIBLE);
                }
            }
        });

private void init() {
        prairText = (TextView) findViewById(R.id.prairText);
        seekBar = (SeekBar) findViewById(R.id.seekBar1);
        try {
            descriptor = getAssets().openFd("mysong.mp3");
            mp.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
            descriptor.close();
            mp.prepare();
        } catch (Exception e) {
            e.printStackTrace();
        }
        seekBar.setMax(mp.getDuration());
    }

如何解决这个问题。提前谢谢。。

共有1个答案

归浩博
2023-03-14

在这里我做了技巧:

>

换了这条线

Intlayer.get货币位置()/1000;

致:

int mCurrentPosition=mp。getCurrentPosition();

  • 改了这条线

议员。希克托(进度*1000);

致:

议员。希克托(进步);

最后,工作代码将是:

public class MainActivity extends Activity {

    private TextView prairText;
    private AssetFileDescriptor descriptor;
    private SeekBar seekBar;
    private MediaPlayer mp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Keep screen active
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        findViewById(R.id.play_button).setVisibility(View.INVISIBLE);
        findViewById(R.id.pauseButton).setVisibility(View.VISIBLE);

        init();

        // Play song
        if (mp != null) {
            mp.start();
        }

        final Handler mHandler = new Handler();
        //Make sure you update Seek bar on UI thread
        MainActivity.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                if(mp != null){
                    int mCurrentPosition = mp.getCurrentPosition();
                    seekBar.setProgress(mCurrentPosition);
                }
                mHandler.postDelayed(this, 1000);
            }
        });

        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if (mp != null && fromUser) {
                    mp.seekTo(progress);
                    mp.start();
                    findViewById(R.id.play_button).setVisibility(View.INVISIBLE);
                    findViewById(R.id.pauseButton).setVisibility(View.VISIBLE);
                }

            }
        });
        findViewById(R.id.play_button).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mp != null) {
                    mp.start();
                    findViewById(R.id.play_button).setVisibility(View.INVISIBLE);
                    findViewById(R.id.pauseButton).setVisibility(View.VISIBLE);
                }
            }
        });

        findViewById(R.id.pauseButton).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (mp != null) {
                    mp.pause();
                    findViewById(R.id.pauseButton).setVisibility(View.INVISIBLE);
                    findViewById(R.id.play_button).setVisibility(View.VISIBLE);
                }
                mp.pause();
            }
        });
        findViewById(R.id.restart_button).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (mp != null) {
                    mp.seekTo(0);
                    mp.start();
                    findViewById(R.id.play_button).setVisibility(View.INVISIBLE);
                    findViewById(R.id.pauseButton).setVisibility(View.VISIBLE);
                }
            }
        });

private void init() {
        mp = new MediaPlayer();
        mp.reset();
        prairText = (TextView) findViewById(R.id.prairText);
        seekBar = (SeekBar) findViewById(R.id.seekBar1);
        try {
            descriptor = getAssets().openFd("mysong.mp3");
            mp.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
            descriptor.close();
            mp.prepare();
        } catch (Exception e) {
            e.printStackTrace();
        }
        int duration = mp.getDuration();
        seekBar.setMax(duration);
    }
}

注意:不要忘记把mysong.mp3放在资产文件夹中

 类似资料:
  • 我正在尝试向seekbar添加一个音频文件,该文件将由seekbar控制,而无需向我的应用程序添加任何按钮。音频文件将附加到seekbar,通过seekbar进程,音量将增加或减少。下面是我的代码,我的应用程序正在崩溃,一次又一次,我不知道为什么。请在这方面帮助我。 下面是我的日志错误

  • 我正在开发一个包含两个活动的应用程序,一个是媒体播放器,另一个是要播放的歌曲列表,mp3播放器工作正常,从活动列表中我传递歌曲的名称和播放器工作正常。我有两个问题,如果用户播放一首歌并离开应用程序(这首歌一直在后台播放,这就是假设的工作方式),然后用户返回应用程序,搜索栏设置为0,计时器设置为0,有没有办法“保存”活动......也是如果一首歌正在播放,用户试图播放另一首歌,这首歌在前一首歌的顶部

  • 我已经创建了一个使用媒体播放器播放音频的应用程序,但即使其他应用程序(如youtube)开始播放视频,我的播放器也不会停止。 如何停止音频,如果其他应用程序开始播放音频。 我用过mediaPlayer。start();播放音频。 任何帮助都将不胜感激。

  • 当我一次又一次点击播放按钮时,它会同时播放多次。我想停止多重播放。这是代码: 媒体播放器和按钮的对象 按钮单击事件监听器以播放音频 按钮单击事件侦听器以停止音频 任何帮助都将不胜感激。谢谢

  • 我正在开发一个包含一些音频播放器的RecyclerView的应用程序。应用程序将下载。3gp文件(如果尚未下载)。 当我单击playAudio按钮时,音频未被播放。 这是我的适配器代码: 我怎样才能解决这个问题?

  • 问题内容: 我的键盘包含用于执行各种非标准键盘任务的一行按钮。这些键包含诸如修改音量,播放或暂停以及跳过曲目等功能。如何使用Python模拟基本播放/暂停?顺便说一下,我在Windows上。 问题答案: 我会用pywin32。与安装捆绑在一起的是大量的API文档(通常放在。),它实际上包装了Win32库中的许多内容,该库用于Windows中的许多低级任务。 安装后,您可以使用keybd_event