【Android实现 资源路径/手机内存/网络文件 下的音频播放】

业务背景:谈业务背景之前,想说的是,出身java开发的我竟然转生到Android异世界当勇者,因为害怕加班,而点满了各种网上get的技能点~
可以说是在一阵疯狂查阅后,终于是解决了第一个问题,assets下的音频播放,接着由浅入深,向后是实现播放手机内存上的音频…

一、直接上封装方法

	/**
     *  在线播放音乐
     */
    void playOnlineSound(String soundUrlDict) {
        try {
            Log.i(TAG,"playOnlineSound:"+soundUrlDict);
            MediaPlayer mediaPlayer = new MediaPlayer();
            if(!TextUtils.isEmpty(soundUrlDict) && !soundUrlDict.contains("/")){//如果不包含"/" 则调用assets内的音频   例xxx.mp3
                //获取assets目录下音频文件的AssetFileDescriptor
                AssetFileDescriptor afd = getAssets().openFd(soundUrlDict);
                //获取AssetFileDescriptor中的 音频文件 / 起始偏移量 / 文件长度:
                mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
            }else if(!TextUtils.isEmpty(soundUrlDict) && !soundUrlDict.contains("http")) {//如果包含"/" 则调用手机文件系统内的音频 例:/storage/emulated/0/KuwoMusic/music/雪.mp3
                    File file = new File(soundUrlDict);
                    FileInputStream fis = new FileInputStream(file);
                    mediaPlayer.setDataSource(fis.getFD());
            }else {//调用网络音频 例:http://****/xxx.mp3
                mediaPlayer.setDataSource(soundUrlDict);
            }
            //异步准备播放
            mediaPlayer.prepareAsync();
            //开始播放
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    mediaPlayer.start();
                }
            });
            //释放MediaPlayer对象
            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    if (mp != null) {
                        mp.release();
                    }
                    Log.d(TAG, "onCompletion: play sound.");
                }
            });
            mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
                    Log.d(TAG, "Play online sound onError: " + i + ", " + i1);
                    return false;
                }
            });
        } catch (IOException e1) {
            Log.e(TAG, "url: ", e1);
        }
    }

二、解释

这段代码实现了在线播放音乐的功能。它接收一个参数 soundUrlDict,代表音乐的地址。

  • 如果地址中不包含斜杠(/),则说明该地址指向应用程序的 assets 目录中的音频文件,程序会从该目录获取音频文件的AssetFileDescriptor,然后设置 MediaPlayer 的数据源为该文件。
  • 如果地址中包含斜杠但不包含 “http”,则说明该地址指向手机文件系统内的音频文件,程序会从该文件获取FileInputStream,然后设置 MediaPlayer的数据源为该文件。
  • 如果地址中包含 “http”,则说明该地址指向网络上的音频文件,程序会直接设置MediaPlayer的数据源为该地址。然后程序异步准备播放,并在准备完成后开始播放。当播放完成后,程序会释放 MediaPlayer对象。
  • 如果在播放过程中出现错误,则程序会打印错误信息。 根据具体场景具体使用。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Android Studio中,raw文件夹是用于存放原始资源文件的目录之一,其中包括各种类型的文件,如音频、视频、图片等。对于音频资源而言,raw文件夹可以用来存放各种格式的音频文件,如mp3、wav等。 在使用Android Studio开发应用程序时,如果需要在应用中使用音频资源,可以将音频文件放置在raw文件夹中。然后可以使用MediaPlayer类来加载和播放这些音频文件。MediaPlayer是Android系统提供的用于控制和播放音频的一个类,通过它可以实现音频播放、暂停、停止等操作。 要在应用中使用raw文件夹中的音频资源,首先需要将音频文件拷贝到res目录下的raw文件夹中。然后可以使用MediaPlayer类的create()方法来创建一个MediaPlayer对象,并通过setDataSource()方法将音频文件路径设置给MediaPlayer对象。接下来可以调用prepare()方法来准备音频资源,并通过start()方法开始播放音频。 需要注意的是,在使用MediaPlayer播放音频资源时,需要增加一些异常处理的代码,以避免程序崩溃。比如,可以在代码中使用try-catch语句来捕捉可能出现的异常,并进行相应的处理操作。 总而言之,raw文件夹是用于存放Android Studio项目中的原始音频资源文件夹,通过使用MediaPlayer类,可以实现对raw文件夹中音频资源的加载和播放操作。这样就可以在应用中添加各种音频效果,提升用户的体验感。 ### 回答2: Android Studio中的raw文件夹是用于存放原始音频文件的特殊文件夹。在这个文件夹中,我们可以将各种音频文件(如mp3、wav等)直接放置在项目中,在需要的时候可以通过代码来进行访问和使用。 使用raw文件夹来存放音频文件的好处是,不需要进行资源的压缩和优化处理,可以保持原始的音质和数据完整性。同时,由于raw文件夹中的文件会原封不动地打包到APK文件中,因此在应用程序运行时可以快速地读取和播放这些音频文件。 要在代码中访问和使用raw文件夹中的音频文件,可以使用以下方法: 1. 获取资源的URI:可以使用`R.raw.filename`来获取对应音频文件资源ID,然后使用`getResources().openRawResourceFd(R.raw.filename)`方法来获取音频文件的URI。 2. 播放音频文件:可以使用MediaPlayer类来播放音频文件。首先需要创建一个MediaPlayer对象,然后调用`setDataSource(Context context, Uri uri)`方法来设置音频文件的URI,最后调用`prepare()`和`start()`方法分别进行准备和播放音频文件。 另外,要记得在使用完音频文件后,及时释放MediaPlayer对象资源,以避免内存泄漏问题。 总之,通过在Android Studio中使用raw文件夹来存放音频文件,我们可以方便地访问和使用这些原始音频文件,并在应用程序中快速地播放它们。同时,使用原始音频文件可以保持音质和数据完整性,提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值