Android BroadcastReceiver 千万不要做耗时的操作,如果有耗时的操作,请让OnReceive 中调用service。
@Override public void onReceive(Context context, Intent intent) {
try { afd = assetManager.openFd("notify.wav"); mAm.requestAudioFocus(null,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN); MediaPlayer player = new MediaPlayer(); player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); player.prepare(); player.start(); player.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){ @Override public void onCompletion(MediaPlayer mp) { mAm.abandonAudioFocus(null); } }); } catch (IOException e) { e.printStackTrace(); }
}
接到订单播放提示语音,发现有时候不能播放出来!!
后来改写到service中
@Override public int onStartCommand(Intent intent, int flags, int startId) { AssetManager assetManager = getApplicationContext().getAssets(); AssetFileDescriptor afd = null; try { afd = assetManager.openFd("notify.wav"); mAm.requestAudioFocus(null,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN); MediaPlayer player = new MediaPlayer(); player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); player.prepare(); player.start(); player.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){ @Override public void onCompletion(MediaPlayer mp) { mAm.abandonAudioFocus(null); } }); } catch (IOException e) { e.printStackTrace(); } return START_STICKY;
然后在Onreceive 中调用service
Toast.makeText(context, "收到了通知", Toast.LENGTH_SHORT).show(); Intent serviceIntent = new Intent(context, PlayMediaService.class); context.startService(serviceIntent);
本文介绍了一个关于Android应用中处理播放通知语音的问题,并提供了解决方案。最初尝试在BroadcastReceiver的onReceive方法中直接播放语音文件,但遇到播放失败的情况。通过调整实现方式,将播放逻辑移到Service中,确保了语音播放的稳定性和应用性能。
1万+

被折叠的 条评论
为什么被折叠?



