Java Android-如何使用MediaPlayer和设备中的mp3?

Java Android-如何使用MediaPlayer和设备中的mp3?,java,android,Java,Android,似乎所有的教程都向您展示了如何从SD卡上传歌曲,但它们都是由程序员定义的位置。我想知道如何使用用户手机上的歌曲,让他们决定预览。比如说,我只想播放一首歌30秒。我用什么方法在一段时间后停止播放歌曲。我试着用定时器,但没用 所以 问题1。用户如何从自己的SD卡中选择歌曲 问题2。你如何设置播放时间的限制 您可以使用 要让您的用户选择您可以构建自己的FileManager的文件,您可以在其他问题上找到一些帮助: 更新 尝试以下方法更改预览歌曲 Timer timer = new Timer(

似乎所有的教程都向您展示了如何从SD卡上传歌曲,但它们都是由程序员定义的位置。我想知道如何使用用户手机上的歌曲,让他们决定预览。比如说,我只想播放一首歌30秒。我用什么方法在一段时间后停止播放歌曲。我试着用定时器,但没用

所以

问题1。用户如何从自己的SD卡中选择歌曲

问题2。你如何设置播放时间的限制

您可以使用

要让您的用户选择您可以构建自己的FileManager的文件,您可以在其他问题上找到一些帮助:

更新

尝试以下方法更改预览歌曲

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
           //Stop the MediaPlayer here
        }
}, 30*1000);
可能少了一些东西。。但是您可以看到,如果调用了该方法。只有当计时器打开时,歌曲才会停止或暂停。当按下另一个按钮时,无法立即停止轨道。这就好像我想让计时器在按下下一个按钮停止时停止,而不允许播放上一个按钮的曲目。但是我想通过按下按钮来启动新的曲目,并停止最后一个曲目。而不是仅仅开始一个新的轨道和依靠计时器停止轨道

希望你能理解

用你的上面

public void getNewStartingPoint() {

    mp = MediaPlayer.create(this, R.raw.aabbccdd);

    try {

        mp.seekTo(newStartingPoint);
        mp.start();
        theOtherStopWatch++;
    } catch (Exception e) {
        Log.e(TAG, "error: " + e.getMessage(), e);
    }
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            mp.pause();
        }
    }, hTMill);

}
工作。。但是,当您停止播放曲目、重置并重新准备时,会减慢播放过程。。它似乎能更快地与

         anotherString = "R.raw.aabbccdd";

         fileName = "android.resource://" + getPackageName() + "/"
            + anotherString;

         mp.setDataSource(path);
         mp.setDataSource(this, Uri.parse(fileName));
         mp.prepare();

成功了!!现在我要做的就是想办法让它运行得更快。。我想我需要把它放在一个单独的线程上运行。我已经有一个倒计时了。问题是调用mp.pause();后跟mp.reset();我想用按钮预览歌曲的不同部分。我下院议员塞克托(10000人)唱了这首歌,然后用另一首歌唱了20000人。。我就是无法让它复位。但现在是这样,因为我有太多的时间在工作。我可能需要另一个线程,所以现在您只需要播放30秒,如果用户单击按钮,您将跳到文件的另一部分?是的。。计算机必须做一些数学运算。这可能是因为两个计时器同时运行。或者android在歌曲跳过并播放时缓冲歌曲@鬼怪。我不知道是什么让它慢下来了。我加了另一个计时器。你写的那个。因为我的计时器不会停止它。我必须重写我如何创建媒体播放器。。。令人讨厌的是,当我用手机上的音乐播放器开始唱歌时,。我可以很容易地跳过这首歌。但在我的应用程序中,如果我按下很多按钮,样本有时会被剪辑。在我的应用程序中,我加载了一个80 MB的mp3文件,在这方面也有一些问题,我可以建议你管理“跳过”按钮,让它跳到按钮停留在1.5秒的时间,不需要点击,所以你只需要一次,而不是几毫秒内的很多次,但它不应该,比如说,我想开始一首新歌预览。这意味着我必须为每首歌实例化一个mediaplayer。我尝试用字符串切换uri。但它需要r.raw.songfile);有点争论。你不能把它变成一根绳子。所以当按下另一个歌曲选择器按钮时,我必须释放该对象,只是大声表达逻辑,因为我周围没有人关心。。
public void getNewStartingPoint() {

    mp = MediaPlayer.create(this, R.raw.aabbccdd);

    try {

        mp.seekTo(newStartingPoint);
        mp.start();
        theOtherStopWatch++;
    } catch (Exception e) {
        Log.e(TAG, "error: " + e.getMessage(), e);
    }
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            mp.pause();
        }
    }, hTMill);

}
         anotherString = "R.raw.aabbccdd";

         fileName = "android.resource://" + getPackageName() + "/"
            + anotherString;

         mp.setDataSource(path);
         mp.setDataSource(this, Uri.parse(fileName));
         mp.prepare();
         mp = MediaPlayer.create(this, R.raw.aabbccdd);