自 1.12 版本发布后, Android 平台已可以使用新的 Android 插件 API 。基于 PluginRegistry.Registrar 的 API 不会立刻废弃,但我们鼓励您向基于 FlutterPlugin 的 API 进行迁移。
相较旧的 API 而言,新版 API 的优点是为生命周期的相关组件提供了更简洁清晰的访问方式。例如,在使用旧的 PluginRegistry.Registrar.activity() 时,如果 Flutter 尚未附加到任何 activites,可能会返回 null 。
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();
}
}
}
解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。
了解课程