我有一个闹钟应用程序,一些用户提示手机在闹钟期间振动,而振动应该被禁用。
经过一些挖掘我发现,在某些设备上有一个系统选项可以让设备随着闹钟音乐振动。例如,在我测试的 Pixel 4 中,它位于设置->声音&振动->振动&Heptics->警报振动。
此设置默认启用的原因是振动试图“模拟”通过 MediaPlayer 播放的音乐,我无法找到一种方法来防止这种情况在应用程序内发生,甚至无法检测是否存在此类设置/启用。
谁知道怎么解决? 这是我用于测试的示例方法:
private fun startThePlayer(context: Context, playInLoop: Boolean = true) {
try {
mediaPlayer.reset()
mediaPlayer.isLooping = playInLoop
val uri = Settings.System.DEFAULT_RINGTONE_URI
mediaPlayer.setDataSource(context, uri)
mediaPlayer.setOnPreparedListener {
mediaPlayer.start()
}
mediaPlayer.prepareAsync()
} catch (e: Exception) {
log(e.toString())
}
}
此功能需要 VIBRATE 许可。
对搭载 Android 13 的 Pixel 4 的影响: 设备在振动,好像在尝试“模仿”播放的音乐。振动强度取决于设备设置中设置的值,完全忽略为闹钟音乐设置的音量,并且还会扰乱直接在我的应用程序中设置的任何振动。
有趣的是,出于某种原因,Android 的默认时钟应用会忽略此设置,并且设备在闹钟期间不会振动。
最佳答案
首先,我建议您使用 android 的 VibratorManager
来控制您的应用振动设置(这就是 android 开发团队如何称呼此服务……多么奇怪)。使用 getDefaultVibrator
和 cancel
方法停止您的应用程序产生的任何振动(官方 docs 来救援)
其次,因为您的应用程序是一个闹钟,请考虑使用 setWakeMode
,这将使您的应用程序在后台运行,而不管显示屏如何(以防止闹钟在以下情况下停止)屏幕关闭)。这是 method documentation还有 PowerManager
flags documentation
希望您能找到合适的组合来满足您的需求
关于android - 如何防止Android在MediaPlayer播放时自动振动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73948459/