如何防止Android在MediaPlayer播放时自动震动

bnlyeluc  于 2023-04-04  发布在  Android
关注(0)|答案(2)|浏览(176)

我有一个闹钟应用程序,一些用户抱怨手机在闹钟期间振动,而振动应该被禁用。
经过一些挖掘,我发现,在一些设备上有一个系统选项,设备沿着报警音乐振动.例如,在我的测试像素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的默认时钟应用程序忽略了此设置,设备在闹钟期间不会振动。

nbysray5

nbysray51#

首先,我建议你使用android的VibratorManager来控制你的应用程序的振动设置(这是android开发团队如何称呼这项服务的...多么奇怪)。使用getDefaultVibratorcancel方法来停止你的应用程序产生的任何振动(官方文档来拯救)
第二,因为你的应用是一个闹钟,请考虑使用setWakeMode,这将允许你保持你的应用在后台运行,而不管显示器(为了防止闹钟停止,如果屏幕关闭)。
希望您能找到合适的组合来满足您的需求

lsmd5eda

lsmd5eda2#

我遇到了同样的问题,解决方法是在媒体播放器上调用setAudioAttributes

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        setAudioAttributes(
            AudioAttributes.Builder()
                .setUsage(USAGE_ALARM)
                .setContentType(CONTENT_TYPE_SONIFICATION)
                .build())
      }

相关问题