Flutter跟Android交互
16lz
2021-01-24
package flutter.fl_print_plimport android.content.Contextimport android.util.Logimport android.widget.Toastimport androidx.annotation.NonNullimport com.google.gson.Gsonimport com.google.gson.JsonArrayimport com.google.gson.JsonParserimport com.inuker.bluetooth.library.BluetoothClientimport com.inuker.bluetooth.library.search.SearchRequestimport com.inuker.bluetooth.library.search.SearchResultimport com.inuker.bluetooth.library.search.response.SearchResponseimport cpcl.Configimport cpcl.PrinterHelperimport io.flutter.embedding.engine.plugins.FlutterPluginimport io.flutter.plugin.common.EventChannelimport io.flutter.plugin.common.EventChannel.EventSinkimport io.flutter.plugin.common.MethodCallimport io.flutter.plugin.common.MethodChannelimport io.flutter.plugin.common.MethodChannel.MethodCallHandlerimport io.flutter.plugin.common.MethodChannel.Resultimport io.reactivex.Observableimport io.reactivex.android.schedulers.AndroidSchedulersimport io.reactivex.schedulers.Schedulers/** xxxxxxPlugin*每次修改代码 要点红停止,重新运行*/public class FlPrintPlPlugin : FlutterPlugin, MethodCallHandler { private var context: Context? = null private var methodChannel: MethodChannel? = null private lateinit var eventChannel: EventChannel private var eventSink: EventSink? = null override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { //测试获取上下文 context = flutterPluginBinding.applicationContext mBluetoothClient = BluetoothClient(context) //双方通信方法注册 methodChannel = MethodChannel(flutterPluginBinding.binaryMessenger, "fl_print_pl").apply { setMethodCallHandler([email protected]) } //flutter主动传输到原生注册 eventChannel = EventChannel(flutterPluginBinding.binaryMessenger, "android_print_event_channel").apply { setStreamHandler(object : EventChannel.StreamHandler { override fun onListen(arguments: Any?, events: EventSink?) { [email protected] = events } override fun onCancel(arguments: Any?) { [email protected] = null } }) } } override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { methodChannel?.setMethodCallHandler(null) methodChannel = null } override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { if (call.method == "getPlatformVersion") { // 这里是判断原生的方法定义的标识执行你要执行的任务 } else if (call.method == "searchBlue") { // 这里是判断原生的方法定义的标识执行你要执行的任务 } else { result.notImplemented() } } /** * 暴露出去供界面传数据到Flutter 这里你可以主动执行此方法向flutter传输数据 */ private fun sendEvent(data: Any) { if (eventSink != null) { eventSink?.success(data) } else { Log.d("xg", "===== FlutterEventChannel.eventSink 为空 需要检查一下 =====") } }
flutter 下面进行接受数据并执行
class _PrintPageState extends State{ static const EventChannel eventChannel = EventChannel("android_print_event_channel"); @override void initState() { eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError); super.initState(); }//接收activity传递来的参数obj void _onEvent(Object obj) { setState(() { if (obj == "printSuccess") { 执行方法 } }); } void _onError(Object obj) {}
更多相关文章
- SimpleAdapter
- Android(安卓)MVC,MVP和MVVM架构模式的探究
- Android(安卓)AbsListView
- Binder框架的一些简单总结(关于自定义服务中的Binder)
- 第九章:Android中的数据存取
- 关于android各种双卡手机获取imei,imsi的处置(mtk,展讯,高通等)
- android动态增加控件时控制样式的方法
- Android中UI线程与后台线程交互设计的5种方法
- Android(安卓)滑动绘制流程探究 系统是如何提高滑动性能?