Android之MediaPlayer一个bug

在使用Android MediaPlayer播放音乐时遇到一个bug,当频繁在同一个音乐上进行播放、暂停操作,大约10次左右会出现播放无声的情况。通过检查代码,怀疑是异步prepare()操作引起的问题。改为同步方式后,该问题未再复现。解决方案是本地音乐使用同步prepare,网络音乐使用异步prepare。
摘要由CSDN通过智能技术生成
本文主要记录使用Android 的MediaPlayer时遇见的一个很奇怪的bug

播放音乐时会出现调用了start,但是没有声音出来
* 测试机器:华为Honor 8, Android 7.0;
* 需求:在音乐列表界面播放音乐,音乐分为本地音乐和网络音乐
* 工具:IjkMediaPlayer在播放网络音乐时差不多有个10秒的延时,就是用户点击到播放出来差不多要10秒(网没有问题,很快),播放本地音乐没有这个问题,暂时无解,所以使用Android 提供的MediaPlayer.
* 思路:按照我的理解嘛,把网络和本地的音乐播放代码用一个,所以使用异步prepare,(注意,这里埋下了问题),因为是在列表里,音乐有很多,点击音乐A播放,再次点击A是暂停,然后再次点击A是继续播放,很简单的功能,所以加了一个判断,记录了上一次的播放的音乐地址,如果不一样,就需要重新初始化Mediaplayer, 因为要联网获取,懒得开线程,直接使用MediaPlayer的异步操作prepareAsync(),写如下出来的代码

```
@Override
public void play(@NonNull String url) {
    play(url, false);
}

@Override
public void play(@NonNull String url, boolean restart) {
    synchronized (mPlayerLocker) {
        try {
            if (mMediaPlayer == null) {
                mMediaPlayer = new MediaPlayer();
            }

            if (restart || !mLastPlayMusicUrl.equals(url)) {
                mMediaPlayer.reset();
                mMediaPlayer.setLooping(true);
                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mMediaPlayer.setOnPreparedListener(mMediaPrepareListener);

                mMediaPlayer.setVolume(0.5f, 0.5f);
                mMediaPlayer.setDataSource(url);
                mLastPla
### 回答1: 使用Android Studio开发音乐播放器可以分为以下步骤: 1. 创建一个新的Android项目并命名为音乐播放器。这将自动生成一个项目的基本结构。 2. 在界面设计中,可以使用XML文件创建音乐播放器的用户界面。可以包含播放/暂停按钮、进度条、音乐列表、音乐封面图片等。 3. 在MainActivity.java文件中,编写逻辑代码来实现音乐播放器的各种功能。可以使用MediaPlayer类来控制音乐的播放、暂停、停止等操作。可以使用MediaMetadataRetriever类来获取音乐文件的元数据,如歌曲名称、艺术家、专辑等。 4. 在AndroidManifest.xml文件中添加必要的权限,如访问存储卡中的音乐文件、获取音乐文件的元数据等。 5. 为音乐播放器添加功能,如播放列表的显示与切换、音乐的循环播放、随机播放、进度条的更新、音乐封面的显示等。 6. 可以自定义音乐播放器的外观,如选择自定义主题颜色、更换播放控制按钮的图标等。 7. 添加额外的功能,如歌词显示、音乐搜索、推荐歌曲等。可以使用网络请求与服务器交互来获取歌曲信息。 8. 在发布之前,进行测试与调试,确保播放器的各项功能正常运行且无bug。 总结:使用Android Studio开发音乐播放器需要对XML界面设计、Java编程语言和Android SDK有一定的了解。通过合理地编写逻辑代码,可实现音乐的播放、暂停、停止等功能,同时可以根据需求对播放器进行定制。开发者还可以通过添加额外的功能提升用户体验,如歌词显示、音乐搜索等。开发完成后,进行测试与调试,确保功能正常运行。 ### 回答2: Android Studio是一款官方的Android开发集成开发环境(IDE),使用Java和Kotlin作为主要开发语言。要在Android Studio中开发一个音乐播放器,可以按照以下步骤进行: 1. 创建一个新的Android项目:打开Android Studio并选择“新建项目”,填写应用程序的名称和包名,选择适当的最低SDK版本等。 2. 布局设计:使用Android Studio的布局编辑器来设计音乐播放器的用户界面。您可以添加播放/暂停按钮、进度条、音频控制按钮等等,根据您的需求进行布局。 3. 添加音频文件:将音频文件添加到项目的资源目录中。您可以在代码中通过资源ID访问这些音频文件。 4. 媒体控制:在Java或Kotlin代码中实现音频播放控制逻辑。您可以使用Media Player类或ExoPlayer库来实现播放、暂停、停止等功能。还可以添加相应的回调方法来监听播放器状态的变化。 5. UI交互:为播放器UI中的各个元素添加交互功能。例如,当用户点击播放按钮时,播放器开始播放音乐;当用户拖动进度条时,播放器跳转到相应的时间点等。 6. 音频控制:实现音频控制功能,例如音量调节、播放模式切换(顺序播放、随机播放等)等。这可以通过修改播放器的相关属性来实现。 7. 错误处理和异常情况:在代码中添加错误处理和异常情况处理逻辑,例如处理音频加载失败、耗时操作中的UI线程阻塞等。 8. 测试和调试:使用Android Studio的调试工具来测试和调试您的应用程序,确保播放器在各种情况下都能正常工作。 9. 发布和部署:最后,您可以在Android Studio中生成一个APK文件,并将其发布到Google Play商店或其他应用商店中。 总结来说,开发一个音乐播放器需要通过创建项目、设计界面、添加音频文件、实现控制逻辑、添加交互功能、处理异常情况等步骤。Android Studio提供了强大的开发工具和库来支持您完成这些任务。 ### 回答3: Android Studio是一个非常强大的集成开发环境,可以用于开发各种类型的Android应用程序,包括音乐播放器。 首先,我们需要在Android Studio中创建一个新的项目。在创建项目时,我们可以选择一些基本的设置,比如应用程序的名称、包名等等。 接下来,我们需要添加一些必要的功能。首先,我们需要添加一个界面来显示音乐播放器的用户界面。我们可以使用XML布局来设计界面,并在代码中使用Java语言来控制布局和显示。 然后,我们需要添加音乐播放器的功能。这包括从存储设备或网络加载音乐文件、播放、暂停、停止音乐等操作。我们可以使用Java的MediaPlayer类来实现这些功能。 同时,我们可以添加一些额外的功能,如音乐列表、循环播放、随机播放、歌词显示等。这需要针对用户需求进行开发,并在代码中实现。 另外,我们还可以添加一些可视化效果,如音乐频谱、音乐可视化效果等。这可以通过使用Android的图形库来实现。 最后,我们需要进行测试和调试,以确保音乐播放器的正常运行。我们可以使用Android Studio提供的调试工具,并在不同的设备上进行测试,以确保应用程序的兼容性和稳定性。 总的来说,使用Android Studio开发一个音乐播放器需要熟悉Android开发技术和相关类库,同时需要进行设计、开发、测试和调试。这需要一定的时间和经验,但通过细心和努力,我们可以开发出一个功能完善的音乐播放器应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值