android中setdate不是静态,android-MediaPlayer setDataSource需要最佳实践建议

在阅读了“ Media Playback”和“ MediaPlayer”的android文档之后,我仍然感到困惑,并且需要经验丰富的有关setDataSource重载方法的建议.

我在项目的Service组件中使用MediaPlayer,该组件在播放音乐时将是foregroundService.我的apk的res / raw文件夹中有我的音乐文件(.mp3).

要开始播放,我知道我必须准备MediaPlayer对象.由于android应用程序中的服务默认情况下使用单个进程和主线程,因此我不希望用户获得ANR

而MediaPlayer会自行准备(请考虑一下原始文件夹中的媒体文件是否很大).

然后,我使用prepareAsync代替prepare(Sync).所以我不能使用:

mp = MediaPlayer.create(context, R.raw.myfile);

因为这已经在内部调用prepare(),但没有在prepareAsync()上调用.

所以基本上我有两个选择(四个中的两个):

Uri myUri = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.myfile);

mp.setDataSource(context, myUri);

要么

AssetFileDescriptor afd = context.getResources().openRawResourceFd(R.raw.myfile);

mp.setDataSource(fd.getFileDescriptor());

afd.close();

使用其中之一后,我可以简单地使用:

mp.prepareAsync();

最后,我的问题浮出水面:“包括这些不同的方法,哪一种是最好的选择?一个比另一个有好处吗?我错过了什么吗?”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值