【问题标题】:How to play the audio files directly from res/raw folder?如何直接从 res/raw 文件夹播放音频文件?
【发布时间】:2011-11-21 21:53:13
【问题描述】:

res/raw 文件夹中有多个音频文件。我显示包含音频文件名的ListView。当用户选择ListView 时,我想播放相应的音频文件。我用过setDataSource(path),但播放时显示错误。如何直接从该文件夹播放音频文件?或者还有其他方法吗?

【问题讨论】:

  • 我需要一个小信息,您在 res 文件夹中保存了多少音频文件以及这些 mp3 文件的总大小是多少。谢谢:)
  • 您需要为此问题添加更多信息。您尝试播放的文件类型以及收到的错误/堆栈跟踪消息。

标签: android media-player r.java-file


【解决方案1】:
mVideoView = (VideoView) findViewById(R.id.Video_FrontPage);
uri = Uri.parse("android.resource://com.urPackageName/" + R.raw.welcom_video);
mVideoView.setVideoURI(uri);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();
mVideoView.start();

【讨论】:

  • 我无法访问 R.raw.filename。我在 res 文件夹中创建了一个 raw 文件夹,并将我的文件也放入其中。
【解决方案2】:
var mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1)
mediaPlayer.start() // no need to call prepare(); create() does that for you

【讨论】:

    【解决方案3】:

    将您的音频文件放在 res/raw 文件夹中,并从 MediaPlayer 的 create 方法中调用它。

    MediaPlayer.create(this, R.raw.audio_file_name).start();

    例如:

    MediaPlayer.create(this, R.raw.sample).start();
    

    【讨论】:

      【解决方案4】:

      要播放原始文件夹中的音频,请调用此方法。就我而言,我的文件名是 notificaion.mp3

      AudioPlayer().playAudio(mContext, "notificaion")
      

      这里是 AudioPlayer 类:

      class AudioPlayer {
      private var mMediaPlayer: MediaPlayer = MediaPlayer()
      
      private fun stopAudio() {
         try {
             mMediaPlayer.release()
         }catch (ex: Exception){
             ex.printStackTrace()
         }
      
      }
      
      fun playAudio(mContext: Context, fileName: String) {
          try {
              stopAudio()
              mMediaPlayer = MediaPlayer.create(mContext, mContext.resources.getIdentifier(fileName, "raw", mContext.packageName))
              mMediaPlayer.setOnCompletionListener {  stopAudio() }
              mMediaPlayer.start()
          }catch (ex: Exception){
              ex.printStackTrace()
          }
      
          }
      }
      

      【讨论】:

        【解决方案5】:
         lv.setOnItemClickListener(new OnItemClickListener() {
              public void onItemClick(AdapterView<?> parent, View view,
                  int position, long id) {
        
                  // selected item 
                  String product = ((TextView) view).getText().toString();
        
                  int [] resID= {R.raw.sound1,R.raw.sound2,R.raw.sound3};
                MediaPlayer mediaPlayer=MediaPlayer.create(this,resID[position]);
        
                  mediaPlayer.start();
                  // sending data to new activity
        
        
              }
            });
        }
        

        【讨论】:

          【解决方案6】:

          在 onItemClickListener 中添加此代码。

          listView.setOnItemClickListener(new OnItemClickListener() {
                      @Override
                      public void onItemClick(AdapterView<?> arg0, View view, int position,long id) {                 
                          TextView txtView=(TextView)view.findViewById(R.id.txt_view);
                          String fname=txtView.getText().toString().toLowerCase();
          
                                          int resID=getResources().getIdentifier(fname, "raw", getPackageName());
          
                                        MediaPlayer mediaPlayer=MediaPlayer.create(this,resID);
                              mediaPlayer.start();
                      }
                  });
          

          【讨论】:

          • 我在这样使用时遇到了ResourceNotFound 异常。我用过getResources().getIdentifier(audioname, "res/raw", getPackageName());
          • 不要使用 res/raw。像这样使用 getResources().getIdentifier(audioname, "raw", getPackageName());
          • 还是同样的问题和异常
          • 你能展示你如何在列表视图中显示文本吗?例如。如果 raw 文件夹包含 sound.mp3 之类的文件,那么您应该只将文件名显示为“声音”,不要显示文件扩展名。
          • 完美。 :) 我也通过了那个 mp3 扩展名。这就是问题所在。
          【解决方案7】:

          试试这个从原始播放::

          MediaPlayer mPlayer2;
          mPlayer2= MediaPlayer.create(this, R.raw.bg_music_wav);
                  mPlayer2.start();
          

          清单文件中的权限 ::

          <uses-permission android:name="android.permission.INTERNET"></uses-permission>
          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
          

          更新::

          public void onItemClick(AdapterView<?> arg0, View view, int position,long id) {     
            MediaPlayer mPlayer2;
          if(position==1)
          {
              mPlayer2= MediaPlayer.create(this, R.raw.song1);
                      mPlayer2.start();
          }else it() .....
          }
          

          【讨论】:

          • 是的。我可以使用MediaPlayer.create(...) 玩。这不是问题。我的问题是从ListView 中选择时我想播放特定的音频文件。因为res\raw 文件夹中有很多文件可用。
          • 正如我在代码“bg_music_wav.wav”中提到的,您可以播放任何文件
          • 您还需要将代码放入点击侦听器并应用您自己的逻辑
          • 比如我有1.mp3,2.mp3最多100.mp3。现在用户在ListView 中选择 49.mp3。如何播放该特定文件?
          • 无需添加任何权限
          猜你喜欢
          • 2016-07-31
          • 1970-01-01
          • 1970-01-01
          • 2020-09-17
          • 2020-04-16
          • 2019-08-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多