我在Android Vibrator上遇到问题。基本上,我只有一个Singletone-作用域类,以某种方式封装了android.os.Vibrator,它有两种方法
startVibrating() {
if (VERSION.SDK_INT < VERSION_CODES.O) {
vibrator.vibrate(PATTERN, 0);
} else {
vibrator.vibrate(VibrationEffect.createWaveform(PATTERN, 0));
}
}
stopVibrating() {
vibrator.cancel();
}
问题是,即使我有用于CPU的WakeLock,在某些Samsung设备上,当手机屏幕关闭时,振动器也会停止。
最佳答案
最近,我们陷入了同样的情况。
根据Android文档:
如果您的过程退出,则您开始的任何振动都将停止。
并且您希望,如果您有与CPU相关的WakeLock
,它应该可以正常工作。但是,我们发现在其他情况下,Android 6和Android 7上的Samsung设备也会停止Vibrator
。例如,每次使用PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK
关闭屏幕时,即使您显式进行其他唤醒锁也是如此。
三星停止了Vibrator
的好消息,但它并不禁止将来开始使用它。
我们结束了下一个解决方法:
屏幕关闭时,当前活动将被调用onStop()
。因此,我们检查是否应该在那一刻振动,如果这样做,我们可以简单地再次启动Vibrator
。也许不是最好的解决方案,但它可以工作。