java - 如何使用 MediaPlayer 开始 Activity

标签 java android android-studio

点击“停止”按钮停止前一个轨道后需要选择另一个随机轨道

我通过单击“播放”按钮播放随机轨道,通过单击“停止”停止播放,然后我需要再次随机化,换句话说,选择另一首轨道。

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

    Button play36 = (Button) findViewById(R.id.threesix);
    Button stop = (Button) findViewById(R.id.stop);

    String[] listOfFiles = new String[0];
    try {
        listOfFiles = getAssets().list("");
        final List<String> musicOnlyList = new ArrayList<>();

        for (int i = 0; i < listOfFiles.length; i++) {
            if (getExtension(listOfFiles[i]).equals("mp3"))
                musicOnlyList.add(listOfFiles[i]);
        }

        final MediaPlayer mediaPlayer = new MediaPlayer();

        play36.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int itemIndex = new Random().nextInt(musicOnlyList.size());
                String file = musicOnlyList.get(itemIndex);
                AssetFileDescriptor afd = null;
                try {
                    afd = getAssets().openFd(file);
                    mediaPlayer.reset();
                    mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                    mediaPlayer.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                mediaPlayer.start();
            }
        });

        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaPlayer.stop();
                mediaPlayer.reset();

            }
        });

    } catch (IOException e) {
        e.printStackTrace();
    }

在这种情况下,我每次启动和停止播放器时都会得到相同的轨道,但每次都需要通过单击“播放”按钮来随机化

最佳答案

你需要在 play36 的监听器中选择一个新的随机数:

Button play36 = (Button)findViewById(R.id.threesix);
Button stop = (Button)findViewById(R.id.stop);

String[] listOfFiles = new String[0];
try {
    listOfFiles = getAssets().list("");
    final List<String> musicOnlyList = new ArrayList<>();

    for(int i = 0; i < listOfFiles.length; i++){
        if (getExtension(listOfFiles[i]).equals("mp3"))
            musicOnlyList.add(listOfFiles[i]);
    }

    final MediaPlayer mediaPlayer = new MediaPlayer();

    play36.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int itemIndex = new Random().nextInt(musicOnlyList.size());
            String file = musicOnlyList.get(itemIndex);
            AssetFileDescriptor afd = null;
            try {
                afd = getAssets().openFd(file);
                mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.start();
        }
    });

    stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mediaPlayer.stop();
            try {
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

} catch (IOException e) {
    e.printStackTrace();
}

关于java - 如何使用 MediaPlayer 开始 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54164628/

相关文章:

java - 解析问题和数字 "doing math"(一个简单的 java 计算器)

java - 用C写Java这段?

java - 我们可以使用反射来获取类的静态成员而不在对象实例上调用该方法吗?

java - Android代码读取文件异常

android - 将 Android Java 代码转换为 Xamarin C#

java - 如果 Edittext 没有输入文本,如何显示 toast?

Android Studio - 用于导航到 xml 声明的热键是导航到 R 文件

java - 没有乘法、除法或 `for` 循环的埃拉托斯特尼筛法

android - 强制 View 至少占据其父级高度的一定百分比

java - Android 应用程序键盘输入/发送键