soundpool 提示堆内存溢出

 呐街角-伤_774 发布于 2022-11-25 18:49

我在广播中对收到短信进行判断,然后根据短信内容想要播放音频文件.
在使用mediaplayer是可以正常播放的,但是使用soundpool就无法播放了,
错误提示,

E/AudioCache: Heap size overflow! req size: 1052672, max size: 1048576

我的音频文件大小是100k,格式是mp3;我的代码是

package com.aa.safe.safe.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.SoundPool;
import android.telephony.SmsMessage;
import android.util.Log;

import com.aa.safe.safe.R;

/**
 * Created by the18 on 2016/11/19 0019.
 */

public class SmsBroadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("SmsBroadcast", "onReceive: " + "进入了短信接受");
        Object[] pdus = (Object[]) intent.getExtras().get("pdus");
        for(Object obj:pdus){
            SmsMessage msg = SmsMessage.createFromPdu((byte[]) obj);
            String msgBody = msg.getMessageBody();

            if("#*location*#".equals(msgBody)) {
                Log.d("SmsBroadcast", "onReceive: location" );
                abortBroadcast();
            }else if("#*alarm*#".equals(msgBody)) {
                Log.d("SmsBroadcast", "onReceive: alarm" );
                final SoundPool sp = new SoundPool(1, AudioManager.STREAM_MUSIC,0);
                final int load = sp.load(context, R.raw.faka,1);
                sp.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
                    @Override
                    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                        sp.play(load,1.0f,1.0f,0,1,1.5f);
                    }
                });
//                MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.faka);
//                mediaPlayer.start();
                abortBroadcast();
            }else if("#*wipedata*#".equals(msgBody)) {
                Log.d("SmsBroadcast", "onReceive: wipedata" );
                abortBroadcast();
            }else if("#*lockscreen*#".equals(msgBody)) {
                Log.d("SmsBroadcast", "onReceive: lockscreen" );
                abortBroadcast();
            }
        }
    }
}


1 个回答
  • 错误已经很明显了,播放的文件大小超过SoundPool所支持的内存限制的大小。SoundPool对内存是有限制的,它只支持小而急促的音频文件。你可以换个更小的音频文件试试。

    2022-11-25 19:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有