请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

旧API PluginRegistry.Registrar 即将被淘汰,迁移到新API FlutterPlugin。

自 1.12 版本发布后, Android 平台已可以使用新的 Android 插件 API 。基于 PluginRegistry.Registrar 的 API 不会立刻废弃,但我们鼓励您向基于 FlutterPlugin 的 API 进行迁移。

相较旧的 API 而言,新版 API 的优点是为生命周期的相关组件提供了更简洁清晰的访问方式。例如,在使用旧的 PluginRegistry.Registrar.activity() 时,如果 Flutter 尚未附加到任何 activites,可能会返回 null 。

注:参考了官方插件webview_flutter的methodChannel实现方式

public class AsrPlugin implements  MethodCallHandler, FlutterPlugin {
  private Context applicationContext;
  private MethodChannel methodChannel;

  /** Plugin registration. */
  @SuppressWarnings("deprecation")
  public static void registerWith(PluginRegistry.Registrar registrar) {
    final AsrPlugin instance = new AsrPlugin();
    instance.onAttachedToEngine(registrar.context(), registrar.messenger());
  }
  
 private void onAttachedToEngine(Context context, BinaryMessenger messenger) {
    applicationContext = context;
    methodChannel = new MethodChannel(messenger, "plugins.yhkj.cn/asr");
    methodChannel.setMethodCallHandler(this);
  }
  
  @Override
  public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) {
    onAttachedToEngine(binding.getApplicationContext(),binding.getBinaryMessenger());
  }
  
  @Override
  public void onDetachedFromEngine(@NonNull FlutterPlugin.FlutterPluginBinding binding) {
    applicationContext = null;
    methodChannel.setMethodCallHandler(null);
    methodChannel = null;
  }

  @Override
  public void onMethodCall( MethodCall call,  Result  result) {
    switch (call.method) {
      case "start":
        // do something...
        break;
      case "stop":
        // do something...
        break;
      case "cancel":
       // do something...
        break;
      default:
        result.notImplemented();
    }
  }
}

正在回答 回答被采纳积分+3

1回答

CrazyCodeBoy 2021-05-14 10:13:28

总结的不错,点赞!

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号