BaseFlutterPlugin 自己定义的BasePlugin,只是为了简化一些重复代码
package com.maiya.call.flutter.base
import android.app.Activity
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.embedding.engine.plugins.activity.ActivityAware
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
import io.flutter.plugin.common.BinaryMessenger
import io.flutter.plugin.common.MethodChannel
// ActivityAware 获取activity
abstract class BaseFlutterPlugin : FlutterPlugin , ActivityAware {
var channel : MethodChannel? = null
var handler : BaseMethodCallHandler? = null
var activity : Activity? = null
abstract fun createMethodCallHandler(messenger: BinaryMessenger) : BaseMethodCallHandler
abstract fun createMethodChannel(messenger: BinaryMessenger) : MethodChannel
abstract fun onAttachedToEngineFinish(binding: FlutterPlugin.FlutterPluginBinding)
abstract fun onDetachedFromEngineFinish(binding: FlutterPlugin.FlutterPluginBinding)
open fun onAttachedToActivityBefore(binding: ActivityPluginBinding){}
open fun onAttachedToActivityAfter(binding: ActivityPluginBinding){}
open fun onDetachedFromActivityForConfigChangesBefore(){}
open fun onDetachedFromActivityForConfigChangesAfter(){}
open fun onReattachedToActivityForConfigChangesBefore(binding: ActivityPluginBinding){}
open fun onReattachedToActivityForConfigChangesAfter(binding: ActivityPluginBinding){}
open fun onDetachedFromActivityBefore(){}
open fun onDetachedFromActivityAfter(){}
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
onAttachedToEngine(binding.binaryMessenger)
onAttachedToEngineFinish(binding)
}
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
onDetachedFromEngine()
onDetachedFromEngineFinish(binding)
}
private fun onAttachedToEngine(messenger: BinaryMessenger) {
channel = createMethodChannel(messenger)
handler = createMethodCallHandler(messenger)
channel?.setMethodCallHandler(handler)
}
private fun onDetachedFromEngine() {
channel?.setMethodCallHandler(null)
channel = null
}
override fun onAttachedToActivity(binding: ActivityPluginBinding) {
onAttachedToActivityBefore(binding)
activity = binding.activity
handler?.attachActivity(binding.activity)
onAttachedToActivityAfter(binding)
}
override fun onDetachedFromActivityForConfigChanges() {
onDetachedFromActivityForConfigChangesBefore()
activity = null
handler?.detachActivity()
onDetachedFromActivityForConfigChangesAfter()
}
override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
onReattachedToActivityForConfigChangesBefore(binding)
activity = binding.activity
handler?.attachActivity(binding.activity)
onReattachedToActivityForConfigChangesAfter(binding)
}
override fun onDetachedFromActivity() {
onDetachedFromActivityBefore()
activity = null
handler?.detachActivity()
onDetachedFromActivityAfter()
}
}
BaseMethodCallHandler 只是为了简化一些重复代码
package com.maiya.call.flutter.base
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.widget.Toast
import com.maiya.call.activity.WebViewActivity
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
abstract class BaseMethodCallHandler : MethodChannel.MethodCallHandler {
var activity : Activity? = null
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
if(resolveBaseMethod(call,result))return
resolveMethodCall(call,result)
}
// 继承实现这个方法
abstract fun resolveMethodCall(call: MethodCall, result: MethodChannel.Result)
// 处理一些公共方法
private fun resolveBaseMethod(call: MethodCall, result: MethodChannel.Result):Boolean{
when(call.method){
}
return false
}
fun attachActivity(activity: Activity){
this.activity = activity
}
fun detachActivity(){
activity = null;
}
}
一般使用分别继承BaseMethodCallHandler 与 BaseMethodCallHandler
class SplashMethodCallHandler : BaseMethodCallHandler() {
override fun resolveMethodCall(call: MethodCall, result: MethodChannel.Result) {
//处理flutter调用android
}
}
class SplashPlugin : BaseFlutterPlugin() {
private val channelName = "com.maiya.call.splash"
override fun createMethodCallHandler(messenger: BinaryMessenger): BaseMethodCallHandler {
return SplashMethodCallHandler()
}
override fun createMethodChannel(messenger: BinaryMessenger): MethodChannel {
return MethodChannel(messenger,channelName)
}
override fun onAttachedToEngineFinish(binding: FlutterPlugin.FlutterPluginBinding) {
}
override fun onDetachedFromEngineFinish(binding: FlutterPlugin.FlutterPluginBinding) {
}
}
Plugin的注册,我现在的处理方式是在flutterActivity中注册
class FlutterSplashActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
flutterEngine?.plugins?.add(SplashPlugin())
}
}