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);