是否可以在 Flutter 中完全处理音量增大/减小产生的事件?
Posted
技术标签:
【中文标题】是否可以在 Flutter 中完全处理音量增大/减小产生的事件?【英文标题】:Is it possible to handle events generated by volume up/down completely in Flutter? 【发布时间】:2020-03-25 11:52:08 【问题描述】:是否可以在 Flutter 中完全拦截硬件按钮产生的事件?例如,如果应用程序处于活动状态并且按下了音量增大/减小按钮,是否可以在应用程序中拦截该事件,以应用程序特定的方式处理它,最重要的是防止它被系统进一步操作,以便实际调高/调低音量并显示显示音量调高/调低的系统对话框/弹出窗口的默认行为不会发生?
我尝试使用 hardware_buttons 颤振库/插件。它允许我在按下按钮时做出反应,但事件仍会继续传播,因此系统也会以常规方式处理它们。
提前感谢您的建议!
【问题讨论】:
这能回答你的问题吗? Access hardware buttons (like the volume buttons) from Flutter 不,它没有。我在我的问题中提到了这个插件,我知道。它不允许我通过 mu 应用程序专门处理事件而不进一步传播它们 你有没有办法做到这一点@hicnar?我发现的唯一库现在已弃用。 :(github.com/flutter-moum/flutter_hardware_buttons 在 android 上,你可以轻松做到这一点,你所要做的就是在你的主要活动中覆盖 onKeyDown 和 onKeyUp 函数,所以它应该看起来像这样:class MainActivity: FlutterActivity() override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean super.onKeyDown(keyCode, event) return true override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean super.onKeyUp(keyCode, event) return true
关于 Apple,AFAIK 你的应用程序将如果它修改了硬件按钮的默认行为,则会被拒绝。
【参考方案1】:
volume_watcher
为我工作。您可以:
import 'package:volume_watcher/volume_watcher.dart';
VolumeWatcher(
onVolumeChangeListener: (double volume)
// do stuff
,
)
或者直接监听事件:
import 'package:volume_watcher/volume_watcher.dart';
int _volumeListenerId;
@override
void initState()
super.initState();
_volumeListenerId = VolumeWatcher.addListener((volume)
// do stuff
);
@override
void dispose()
VolumeWatcher.removeListener(_volumeListenerId);
super.dispose();
【讨论】:
【参考方案2】:答案是否定的,虽然您可以聆听它们,但无法使用它们并阻止操作系统对其进行操作。另一个示例问题只是听音量。
【讨论】:
【参考方案3】:您可以使用perfect_volume_control 包。 获取设备音量
PerfectVolumeControl.getVolume();
PerfectVolumeControl.volume;
添加监听器
PerfectVolumeControl.stream.listen((volume)
print(volume);
);
【讨论】:
以上是关于是否可以在 Flutter 中完全处理音量增大/减小产生的事件?的主要内容,如果未能解决你的问题,请参考以下文章
xamarin.forms - 音量增大和减小键的事件侦听器
请问家里用闹钟的蜂鸣器音量太小,有什么方法可以增大音量,比如换蜂鸣器等!多谢详细介绍~谢谢!
如何在windows10实现键盘控制音量快捷键 - F12增大音量F11减低音量F10静音 - 使用微软官方的PowerToys实用工具中的Keyboard Manager自定义快捷键