ara*_*kn0 24 android media-player
我是Android开发的新手,我有一个问题/疑问.
我正在玩MediaPlayer类来重现一些声音/音乐.我正在玩原始资源(res/raw),看起来很容易.
要播放原始资源,MediaPlayer必须像这样初始化:
MediaPlayer mp = MediaPlayer.create(appContext, R.raw.song);
mp.start();
直到这里没有问题.声音播放,一切正常.当我想为我的应用程序添加更多选项时,会出现我的问题.特别是当我添加"停止"按钮/选项时.
基本上,我想要做的是......当我按下"停止"时,音乐停止.当我按"开始"时,歌曲/声音重新开始.(非常基本!)
要停止媒体播放器,您只需要拨打电话stop().但要再次播放声音,媒体播放器必须重新制作并准备好.
mp.reset();
mp.setDataSource(params);
mp.prepare();
问题是该方法setDataSource()仅接受文件路径,内容提供者URI,流媒体URL路径或文件描述符作为参数.
因此,由于此方法不接受资源标识符,因此我不知道如何设置数据源以便调用prepare().另外,我不明白为什么你不能使用Resouce标识符来设置数据源,但是在初始化MediaPlayer时你可以使用资源标识符.
我想我错过了一些东西.我想知道我是否在混合概念,并且stop()不必在"停止"按钮中调用该方法.有帮助吗?
提前致谢!!!
ads*_*tro 27
以下是我使用单个MediaPlayer加载多个资源的操作:
/**
* Play a sample with the Android MediaPLayer.
*
* @param resid Resource ID if the sample to play.
*/
private void playSample(int resid)
{
AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
try
{
mediaPlayer.reset();
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
mediaPlayer.prepare();
mediaPlayer.start();
afd.close();
}
catch (IllegalArgumentException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
catch (IllegalStateException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
catch (IOException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
Run Code Online (Sandbox Code Playgroud)
mediaPlay是一个成员变量,可以在类中的其他位置创建和发布.这可能不是最好的方式(我自己是Android新手),但似乎有效.请注意,在播放mediaPlayer之前,代码可能会落到方法的底部.如果您需要播放一系列资源,您仍需要处理此案例.
mis*_*kin 15
这是MediaPlayer.create方法用于打开原始文件的方式:
public static MediaPlayer create(Context context, int resid) {
try {
AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
if (afd == null) return null;
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mp.prepare();
return mp;
} catch (IOException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
} catch (IllegalArgumentException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
} catch (SecurityException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过以下方式访问资源:
mediaPlayer.setDataSource(context, Uri.parse("android.resource://com.package.name/raw/song"));
Run Code Online (Sandbox Code Playgroud)
其中com.package.name是应用程序包的名称