android - MediaPlayer.create 和 setDataSource 实现之间的区别

标签 android methods media-player implementation difference

我正在使用多个媒体播放器对象循环播放某些轨道,我想知道使用 MediaPlayer.create(resId) 与使用 setDataSource(FileDescriptor) 等手动编程不同状态之间的区别。我'我还是 android 的新手,所以我不知道。

最佳答案

.create()MediaPlayer 类的静态方法,无论什么时候你想调用.create() 都必须调用它通过 ClassName.methodName() 类似于 MediaPlayer.create()

setDataResource()MediaPlayer 类它将通过 MediaPlayer 的实例调用,如

MediaPlayer mp;
mp.setDataResource("your sdCard File Path...");



现在,如果您使用 MediaPlayer.create(),您应该在 res 下的 raw 文件夹中拥有音频 (mp3) 文件。如果你没有 raw 文件夹创建一个(通常我们必须在我们的项目中手动创建 raw 文件夹)并传递 resId .create() 方法中的 mp3 文件,如

MediaPlayer mp = MediaPlayer.create(R.raw.mp3FileName);

第二个是 setDataResource() 方法,用在你想通过你的 SDCard 播放音频文件的地方,但你需要确保你给 setDataSource() 的路径是完全正确的。执行此操作的最佳方法是使用

,而不是对“/sdcard/”的引用进行硬编码
android.os.Environment.getExternalStorageDirectory()
MediaPlayer mediaPlayer = new MediaPlayer();
File path = android.os.Environment.getExternalStorageDirectory();
mediaPlayer.setDataSource(path + "/fileName.mp3");


通过这种方式,您可以获得正确的路径并通过 SDCard 播放您的 mp3。 希望这个解释能帮助你理解。有关详细信息,请参阅 MediaPlayer From Android Developer Site

关于android - MediaPlayer.create 和 setDataSource 实现之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20537290/

相关文章:

c#从对象调用方法

azure - Azure 媒体服务是否可以用于覆盖每个人都不同的自定义水印?

android - Thread 内部的方法失去焦点

android - 如何在android中隐藏首选项 fragment 的标题栏?

java - Google Play 游戏服务排行榜——它是什么样子的?

ruby - 我如何检查一对单词是否只有 1 个字母不同?

java - 如何将流式传输到 MediaPlayer 的音频缓存到磁盘中?

android - 在 fragment 中显示可点击列表

java - 重新排列 SimpleCursorAdapter 中的 ListView 项目

java - 为什么这个 toast 在不应该出现的时候出现了?