我在广播中对收到短信进行判断,然后根据短信内容想要播放音频文件.
在使用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();
}
}
}
}
L'erreur est évidente, la taille du fichier en cours de lecture dépasse la limite de mémoire prise en charge par
SoundPool
.SoundPool
La mémoire est limitée et ne prend en charge que les petits fichiers audio urgents. Vous pouvez essayer de passer à un fichier audio plus petit.