【问题标题】:Android - How To Use MediaPlayer With mp3 From Device?Android - 如何使用来自设备的 mp3 媒体播放器?
【发布时间】:2014-03-11 07:23:18
【问题描述】:
public void getNewStartingPoint() {

    path = "/mnt/sdcard/downloads/bluetooth/aabbccdd.mp3"; 

    try {
        mp.setDataSource(path);
        mp.prepare();
        mp.start();
    } catch (Exception e) {
        Log.e(TAG, "error: " + e.getMessage(), e);
    }

}

似乎所有教程都向您展示了如何从 sdcard 上传歌曲,但它们都是程序员定义的位置。我想知道如何使用他们可以决定预览的用户手机上的歌曲。还说例如我只想播放一首歌曲 30 秒。我用什么方法可以在一定时间后停止播放歌曲。我尝试使用计时器,但它不起作用。

所以

问题1.用户如何从自己的sdcard中选择歌曲,

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

【问题讨论】:

    标签: java android


    【解决方案1】:
    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);
    

    【讨论】:

      【解决方案2】:

      您可以使用

      实现“30 秒”
          Timer timer = new Timer();
          timer.schedule(new TimerTask() {
              @Override
              public void run() {
                 //Stop the MediaPlayer here
              }
      }, 30*1000);
      

      为了让您的用户选择您可以构建自己的 FileManager 的文件,您可以在其他问题中找到一些帮助:Android Programming: Where To Start For Creating A Simple File Browser?

      更新

      试试这个方法来改变你的预览歌曲

      mp.stop();
      mp.reset();
      Uri url = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.1);
      File songFile = new File(url.toString());
      mp.setDataSource(songFile.getPath());
      mp.prepare();
      

      【讨论】:

      • 成功了!!现在我要做的就是弄清楚如何让它运行得更快。我想我需要把它放在一个在单独线程上运行的可运行文件上。我已经有一个倒数计时器。问题是调用 mp.pause();其次是 mp.reset();我想使用按钮预览歌曲的不同部分。我 mp.seekTo(10000) 进入歌曲,然后 20000 和另一个 .. 我只是无法让它重置。但现在它是,因为我有这么多的时钟运行。我可能需要另一个线程
      • 所以现在你只需要播放 30 秒,如果用户点击一个按钮,你会跳到文件的另一部分吗?
      • 是的.. 计算机必须做一些数学运算。可能是因为两个定时器同时运行。或android在歌曲跳过和播放时缓冲歌曲。 @GhostDerfel。我不知道是什么让它慢下来。我添加了另一个计时器。你写的那个。因为我的计时器不会停止它。我不得不重写我创建媒体播放器的方式......令人讨厌的是当我在手机上使用音乐播放器并开始播放歌曲时。我可以轻松地跳过这首歌。但在我的应用程序中,如果我按下很多按钮,示例有时会剪辑。跳过轨道会减慢速度
      • 在我的应用程序中,我加载了一个 80 MB 的 mp3 文件,并且对此也有一些问题,我可以建议您管理跳过按钮以跳到按钮保持 1.5 秒没有的时间一次点击,因此您可以累积更改,然后在几毫秒内只累积一次,而不是很多次
      • 但它不应该,例如我想开始一首新歌来预览。这意味着我必须为每首歌曲实例化一个媒体播放器。我尝试用字符串切换uri。但它需要 r.raw.songfile);有点争论。你不能把它变成一个字符串。所以...当按下另一个歌曲选择器按钮时,我不得不释放对象,只是大声表达逻辑,因为我周围没有其他人关心..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      相关资源
      最近更新 更多