如何直接从 res/raw 文件夹播放音频文件?
Posted
技术标签:
【中文标题】如何直接从 res/raw 文件夹播放音频文件?【英文标题】:How to play the audio files directly from res/raw folder? 【发布时间】:2011-11-21 21:53:13 【问题描述】:res/raw
文件夹中有多个音频文件。我显示包含音频文件名的ListView
。当用户选择ListView
时,我想播放相应的音频文件。我用过setDataSource(path)
,但播放时显示错误。如何直接从该文件夹播放音频文件?或者还有其他方法吗?
【问题讨论】:
我需要一个小信息,您在 res 文件夹中保存了多少音频文件以及这些 mp3 文件的总大小是多少。谢谢:) 您需要为此问题添加更多信息。您尝试播放的文件类型以及收到的错误/堆栈跟踪消息。 【参考方案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。如何播放该特定文件?
无需添加任何权限以上是关于如何直接从 res/raw 文件夹播放音频文件?的主要内容,如果未能解决你的问题,请参考以下文章