【问题标题】:Simple mediaplayer play mp3 from file path?简单的媒体播放器从文件路径播放 mp3?
【发布时间】:2013-05-18 21:02:03
【问题描述】:

我有一个非常简单的播放背景的媒体播放器。它从 apk 调用文件,但我希望它从任何目录播放,如音乐或 sdcard。

这是我的代码:

private MediaPlayer mpintro;

.
.

mpintro = MediaPlayer.create(this, R.raw.intro);
        mpintro.setLooping(true);
        mpintro.start();

【问题讨论】:

  • @Johnsimit 使用默认异常 e.
  • 它的工作原理是这样的:`mpintro = MediaPlayer.create(this, Uri.parse(Environment.getExternalStorageDirectory().getPath()+ "/Music/intro.mp3")); mpintro.setLooping(true); mpintro.start();` 它不能作为字符串文件路径正常工作...
  • @Johnsimit 我已经在localhost/Android/music/vande.mp3 中部署了我所有的 mp3 文件,我像你所说的那样使用 Uri.parse(Environment.getExternalStorageDirectory().getPath()+ "//localhost/Android/Music/ vande.mp3")); mpintro.setLooping(true); mpintro.start();` 但它不工作

标签: android android-mediaplayer android-sdcard android-file


【解决方案1】:

它是这样工作的:

mpintro = MediaPlayer.create(this, Uri.parse(Environment.getExternalStorageDirectory().getPath()+ "/Music/intro.mp3"));
mpintro.setLooping(true);
        mpintro.start();

它不能作为字符串文件路径正常工作...

【讨论】:

    【解决方案2】:
    String filePath = Environment.getExternalStorageDirectory()+"/yourfolderNAme/yopurfile.mp3";
    mediaPlayer = new  MediaPlayer();
    mediaPlayer.setDataSource(filePath);
    mediaPlayer.prepare();   
    mediaPlayer.start()
    

    这个从原始文件夹播放。

    int resID = myContext.getResources().getIdentifier(playSoundName,"raw",myContext.getPackageName());
    
                MediaPlayer mediaPlayer = MediaPlayer.create(myContext,resID);
                mediaPlayer.prepare();
                mediaPlayer.start();
    

    mycontext=application.this. 使用。

    【讨论】:

    • 它说 用 try/catch 环绕,当我使用文件路径时.. 需要吗?
    • @John simit 每次你正确使用 try catch 块的任何代码时,这是一个好习惯和良好的编程技术。
    • catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 它给了我完整的 catch 代码,使用 Exception e 是否足够,或者我应该使用给我的建议吗?
    • @Johnsimit 简单异常。仅使用默认异常。如果有帮助,请点击正确的标记。好的,再见
    【解决方案3】:

    这里是设置MediaPlayer 来播放 SD 卡的代码:

    String PATH_TO_FILE = "/sdcard/music.mp3";    
    mediaPlayer = new  MediaPlayer();
    mediaPlayer.setDataSource(PATH_TO_FILE);
    mediaPlayer.prepare();   
    mediaPlayer.start()
    

    您可以查看完整示例here。如果您有任何问题,请告诉我。

    【讨论】:

      【解决方案4】:

      使用下面对我有用的代码。

      MediaPlayer mp = new MediaPlayer();
      mp.setDataSource("/mnt/sdcard/yourdirectory/youraudiofile.mp3");
      mp.prepare();
      mp.start();
      

      【讨论】:

      • Environment.getExternalStorageDirectory() 我怎么能这样使用?有时不同的设备可能会导致文件路径宽度出现问题?
      • @MD 如果您使用这种类型的路径,那么有时 sdcard 名称会不同。有些设备也有 10 GB 外加 Internet 内存,因此它用作外部存储器。所以此路径无法工作。
      • @Zala Janaksinh ,这只是一个例子。我试着告诉他,它是如何工作的。我没有实现她的逻辑和她的代码。
      • @MdAbdulGafur 不要私信我只是建议。抱歉
      • 另一个安卓示例:mp.setDataSource("/storage/emulated/0/Music/");
      【解决方案5】:

      我使用这个类来播放音频。如果您的音频位置是原始 文件夹。

      调用播放方法:

      new AudioPlayer().play(mContext, getResources().getIdentifier(alphabetItemList.get(mPosition)
                              .getDetail().get(0).getAudio(),"raw", getPackageName()));
      

      AudioPlayer.java 类:

      public class AudioPlayer {
      
          private MediaPlayer mMediaPlayer;
      
          public void stop() {
              if (mMediaPlayer != null) {
                  mMediaPlayer.release();
                  mMediaPlayer = null;
              }
          }
          // mothod for raw folder (R.raw.fileName)
          public void play(Context context, int rid){
              stop();
      
              mMediaPlayer = MediaPlayer.create(context, rid);
              mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                  @Override
                  public void onCompletion(MediaPlayer mediaPlayer) {
                      stop();
                  }
              });
      
              mMediaPlayer.start();
          }
      
          // mothod for other folder 
          public void play(Context context, String name) {
              stop();
      
              //mMediaPlayer = MediaPlayer.create(c, rid);
              mMediaPlayer = MediaPlayer.create(context, Uri.parse("android.resource://"+ context.getPackageName()+"/your_file/"+name+".mp3"));
              mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                  @Override
                  public void onCompletion(MediaPlayer mediaPlayer) {
                      stop();
                  }
              });
      
              mMediaPlayer.start();
          }
      
      }
      

      【讨论】:

        【解决方案6】:

        2020 年 - 11 月

        这对我有用:

        final File file = new File(getFilesDir(), "test.wav");//OR path to existing file
        mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.fromFile(file));
        mediaPlayer.start();
        

        【讨论】:

          【解决方案7】:

          在 Kotlin 中:

          1) 该文件位于 resource 文件夹中:

          var nowLesson =resources.getIdentifier("test.mp3", "raw", packageName)
                       
          mediaPlayer = MediaPlayer.create(applicationContext, nowLesson)
              
          mediaPlayer.start()
          

          2)文件位于Path(文件路径)

          val file = File(
                  this.getDir("Music", MODE_PRIVATE),
                  "/t.mp3"
              )
          mediaPlayer = MediaPlayer.create(this,Uri.fromFile(file ))
                          mediaPlayer.start()
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-07
            相关资源
            最近更新 更多