Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何直接从res/raw文件夹播放音频文件?_Android_Media Player_R.java File - Fatal编程技术网

Android 如何直接从res/raw文件夹播放音频文件?

Android 如何直接从res/raw文件夹播放音频文件?,android,media-player,r.java-file,Android,Media Player,R.java File,我在res/raw文件夹中有多个音频文件。我正在显示包含音频文件名的ListView。当用户选择进入列表视图时,我想播放相应的音频文件。我使用了setDataSource(path),但它在播放时显示错误。如何直接从该文件夹播放音频文件?或者还有其他方法吗?从原始播放时尝试以下方法: MediaPlayer mPlayer2; mPlayer2= MediaPlayer.create(this, R.raw.bg_music_wav); mPlayer2.start(); 清单

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

从原始播放时尝试以下方法:

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,视图视图,int位置,长id){
MediaPlayer MPlayer 2;
如果(位置==1)
{
mPlayer2=MediaPlayer.create(this,R.raw.song1);
mPlayer2.start();
}否则它就。。。。。
}

在侦听器中添加此代码

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();
            }
        });
listView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView arg0,视图,int位置,长id){
TextView txtView=(TextView)view.findViewById(R.id.txt_视图);
字符串fname=txtView.getText().toString().toLowerCase();
int resID=getResources().getIdentifier(fname,“raw”,getPackageName());
MediaPlayer=MediaPlayer.create(this,resID);
mediaPlayer.start();
}
});
希望这能对你有所帮助

lv.setOnItemClickListener(新的OnItemClickListener(){
 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


      }
    });
}
public void onItemClick(AdapterView父级、视图、, 内部位置,长id){ //选定项目 字符串产品=((TextView)视图).getText().toString(); int[]resID={R.raw.sound1,R.raw.sound2,R.raw.sound3}; MediaPlayer=MediaPlayer.create(这个,resID[position]); mediaPlayer.start(); //向新活动发送数据 } }); }
要从原始文件夹播放音频,请调用此方法。就我而言,我的文件名是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()
    }

    }
}

将音频文件放在res/raw文件夹中,并通过MediaPlayer的创建方法调用它

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

例如:


是 啊我可以使用
MediaPlayer.create(…)
进行播放。这不是问题。我的问题是,当从
ListView
中选择时,我想播放特定的音频文件。因为
res\raw
文件夹中有很多可用的文件。正如我在代码“bg_music_wav.wav”中提到的,您可以播放任何文件。您还需要做一件事,将代码放入click listener并应用您自己的逻辑。例如,我有1.mp3,2.mp3到100.mp3。现在用户在
列表视图中选择49.mp3。如何播放该特定文件?无需添加任何权限我在这样使用时遇到了
ResourceNotFound
异常。我使用了
getResources().getIdentifier(audioname,“res/raw”,getPackageName())。不要使用res/raw。像这样使用getResources().getIdentifier(audioname,“raw”,getPackageName());仍然存在相同的问题和例外可以显示如何在listview中显示文本。例如,如果原始文件夹包含类似sound.mp3的文件,则应仅将文件名显示为“sound”,而不显示文件扩展名。完美:)我也通过了mp3分机。这就是问题所在。我无法访问R.raw.filename。我在我的res文件夹中创建了一个原始文件夹,并将我的文件放在其中。我需要一个小信息,您在res文件夹中保存了多少音频文件,以及这些mp3文件的总大小。谢谢:)您需要为这个问题添加更多信息。您尝试播放的文件类型以及您收到的错误/堆栈跟踪消息。
AudioPlayer().playAudio(mContext, "notificaion")
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()
    }

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