我必须通知用户特定事件。即使插入耳机且用户远离手机,通知应该像铃声一样,应该在扬声器上播放。
因此我使用的音频流类型为AudioManager.STREAM_RING
,即使在打开头戴式耳机时也能在Phones扬声器上听到。
我面临的问题是在Moto G4& E4以低音量开始(几乎听不到),然后瞬间播放正常响亮的铃声。
我的代码如下,
停止玩家的代码:
if (mPlayer != null && mPLayer.isPlaying()) {
mPlayer.stop();
mPlayer.release();
}
播放铃声的代码:
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.MODE_RINGTONE);
if (am != null) {
switch (am.getRingerMode()) {
case AudioManager.RINGER_MODE_SILENT:
case AudioManager.RINGER_MODE_VIBRATE:
return;
}
}
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);
mediaPlayer.setOnCompletionListener(onCompletionListener);
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.w(TAG, "Failed to beep " + what + ", " + extra);
if (mp.isPlaying())
mp.stop();
mp.release();
return true;
}
});
try {
AssetFileDescriptor file = context.getResources().openRawResourceFd(R.raw.stop_sound);
try {
mediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength());
} finally {
file.close();
}
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException ioe) {
Log.w(TAG, ioe);
mediaPlayer.release();
}
我该怎么做才能防止这种情况发生?我无法在这些设备上找到任何可以针对此类行为进行更改的自定义设置。