Androd 播放音频Mp3

播放assets文件中的音频文件

kotlin实现:

    private var mediaPlayer: MediaPlayer? = null
    /**
     * 打开assets下的音乐mp3文件
     */
    fun openAssetMusics(
        mp3Name: String,
        onPreparedListener: MediaPlayer.OnPreparedListener,
        onCompletionListener: MediaPlayer.OnCompletionListener
    ) {
        try {
            mediaPlayer?.release()
            mediaPlayer = null
            val fd: AssetFileDescriptor =
                this.requireContext().assets.openFd(mp3Name)
            mediaPlayer = MediaPlayer()
            mediaPlayer?.setDataSource(fd.fileDescriptor, fd.startOffset, fd.length)
            mediaPlayer?.setOnPreparedListener(onPreparedListener)//音频准备完毕
            mediaPlayer?.setOnCompletionListener(onCompletionListener)//音频播放完毕
            mediaPlayer?.prepare()
            mediaPlayer?.start()
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

使用示例:

        openAssetMusics("jiayou.mp3",
            {
            //TODO 开始播放
            }) {
            //TODO 播放完
        }

java实现:

    private MediaPlayer mediaPlayer;
    /**
     * 打开assets下的音乐mp3文件
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void openAssetMusics(String mp3Name) {
        try {
            if (TextUtils.isEmpty(mp3Name) || !mp3Name.contains(".mp3")) {
                return;
            }
            if (mediaPlayer != null) {
                mediaPlayer.release();
                mediaPlayer = null;
            }
            //播放 assets/a2.mp3 音乐文件
            AssetFileDescriptor fd =
                    this.getAssets().openFd(mp3Name);
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
//            mediaPlayer.setOnPreparedListener(onPreparedListener)//音频准备完毕
//            mediaPlayer.setOnCompletionListener(onCompletionListener)//音频播放完毕
            mediaPlayer.prepare();
            mediaPlayer.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值