android - 强制通知声音,即使静音
问题描述
即使手机静音,我也想在通知中强制发出声音。(是的,我知道,这不是概念,但如果有人闯入我的房子,我希望我的警报系统发出通知)
我正在使用带有 HTC one A9s 的 Android 6.0 上的 Android API 23。从我读到的,我唯一的选择是:
- 缓存当前音频设置
- 更改为 RINGER_MODE_NORMAL 并设置 MAX_AUDIO
- 运行通知
- 恢复旧的音频设置
这很好用,如果我在调试模式下做一个断点并遍历我的代码的每一行。但如果我在没有断点的调试模式下运行(一切都一样),它就不起作用。所以我认为这是一个时间问题,音频管理器/或硬件不会足够快地从静音变为非静音。我不是专家,但这是我的结论。任何建议如何处理?我可以睡觉或做点什么,但这似乎可靠且正确。
我当前的代码:
// save current audio settings to restore later
int audio_ringermode = audio_mode.getRingerMode();
audio_old_volume =
audio_mode.getStreamVolume(AudioManager.STREAM_NOTIFICATION);
// set new audio settings
audio_mode.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
audio_mode.setStreamVolume(AudioManager.STREAM_NOTIFICATION,audio_mode.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION),0);
// Notification
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, ADMIN_CHANNEL_ID)
.setSmallIcon(R.drawable.ic_home_notify)
.setColor(notification_icon)
.setContentTitle(notification_title)
.setContentText(notification_text)
.setAutoCancel(true)
.setSound(defaultSoundUri);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(notificationId,notificationBuilder.build());
// restore old audio settings
audio_mode.setRingerMode(audio_ringermode);
audio_mode.setStreamVolume(AudioManager.STREAM_NOTIFICATION, audio_old_volume ,0);
解决方案
即使电话静音,这对我也有用:
private void playSound() {
MediaPlayer mediaPlayer = MediaPlayer.create(mContext, R.raw.ring_message);
AudioManager am =
(AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
mediaPlayer.start();
}
推荐阅读
- postgresql - Spring boot entitymanager更新查询postgress获取结果
- html - HTML 表单验证确保输入字段中的最后 2 个字符是字母
- flutter - 无法在 Scaffold 小部件后面堆叠图像
- c - 我如何在 caesar cs50 中加密用户的输入?
- python - 应用程序无法连接到服务器(python、flask、android studio)
- angular - Angular:Mat-Dialog 关闭后 Mat-Table 未更新
- azure - Azure ADF 报价全部禁用
- open-policy-agent - 如何在 Windows 上安装开放策略代理?
- java - 如何从excel文件中获取特定的单元格值
- django - 日期时间字段参数