【问题标题】:How to override power and volume buttons in flutter?如何在颤动中覆盖电源和音量按钮?
【发布时间】:2021-10-11 19:57:56
【问题描述】:

我想覆盖电源或音量按钮并为其提供自定义功能。我已经尝试过硬件按钮包 (https://pub.dev/packages/hardware_buttons/example),但它未能构建并出现错误: C:\flutter\.pub-cache\hosted\pub.dartlang.org\hardware_buttons-1.0.0\android\src\main\kotlin\flutter\moum\hardware_buttons\HardwareButtonsWatcherManager.kt: (74, 42): Object is not abstract and does not implement abstract base class member public abstract fun onActivityStarted(@NonNull p0: Activity): Unit defined in flutter.moum.hardware_buttons.EmptyActivityLifecycleCallbacks 在 Flutter 中收听电源/音量按钮按下事件的最佳方式是什么?

【问题讨论】:

    标签: android flutter hardware


    【解决方案1】:

    我也遇到过这个问题,并使用MethodChannel 和特定于平台的代码解决了它。

    例如,在 Android 端,我这样做是为了调用我的颤振代码:

    class MainActivity: FlutterActivity() {
        private lateinit var channel : MethodChannel;
    
        override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
            super.configureFlutterEngine(flutterEngine)
            channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "mychannel")
        }
    
        // using platform-specific events
        override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
            when (keyCode) {
                KeyEvent.KEYCODE_VOLUME_DOWN -> channel.invokeMethod("volumeBtnPressed", "volume_down")
                KeyEvent.KEYCODE_VOLUME_UP -> channel.invokeMethod("volumeBtnPressed", "volume_up")
            }
            // return true means "prevent default behavior", so volume doesn't change and volume bar doesn't appear
            return true
        }
    }
    

    在 Flutter 方面(在 State 类中):

      static const _volumeBtnChannel =
          MethodChannel("mychannel");
    
      @override
      void initState() {
        _volumeBtnChannel.setMethodCallHandler((call) {
          if (call.method == "volumeBtnPressed") {
            if (call.arguments == "volume_down") {
              doMyCustomLogic();
            }
          }
    
          return Future.value(null);
        });
        super.initState();
      }
    
    

    注意 另外,@Kozubi 提到 here 可以以某种方式使用 Shortcuts 类,但我不明白如何。

    【讨论】:

      猜你喜欢
      • 2015-08-15
      • 2012-04-10
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 2014-03-21
      • 2012-03-21
      相关资源
      最近更新 更多