提交 e41ba7d7 authored 作者: shixiaochen's avatar shixiaochen

1、Android导航

上级 ae2907f1
...@@ -47,4 +47,5 @@ android { ...@@ -47,4 +47,5 @@ android {
dependencies { dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
compileOnly 'com.amap.api:navi-3dmap:9.5.0_3dmap9.5.0'
} }
package com.clx.navigation.clx_map_navigation package com.clx.navigation.clx_map_navigation
import android.util.Log
import androidx.annotation.NonNull import androidx.annotation.NonNull
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import com.amap.api.navi.NaviSetting
import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding
import io.flutter.embedding.engine.plugins.activity.ActivityAware
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
import io.flutter.embedding.engine.plugins.lifecycle.HiddenLifecycleReference
import io.flutter.plugin.common.MethodCall import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugin.common.MethodChannel.Result
/** ClxMapNavigationPlugin */ /** ClxMapNavigationPlugin */
class ClxMapNavigationPlugin: FlutterPlugin, MethodCallHandler { class ClxMapNavigationPlugin : FlutterPlugin, ActivityAware {
/// The MethodChannel that will the communication between Flutter and native Android
/// private var mLifecycle: Lifecycle? = null
/// This local reference serves to register the plugin with the Flutter Engine and unregister it
/// when the Flutter Engine is detached from the Activity override fun onAttachedToEngine(@NonNull binding: FlutterPluginBinding) {
private lateinit var channel : MethodChannel Log.d(Constants.TAG, "onAttachedToEngine: ")
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { binding.platformViewRegistry
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "clx_map_navigation") .registerViewFactory(
channel.setMethodCallHandler(this) Constants.VIEW_TYPE,
} NavigationPlatformViewFactory(
binding.binaryMessenger,
override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { object : LifecycleProvider {
if (call.method == "getPlatformVersion") { override val lifecycle: Lifecycle?
result.success("Android ${android.os.Build.VERSION.RELEASE}") get() = mLifecycle
} else { }
result.notImplemented() )
)
}
override fun onDetachedFromEngine(@NonNull binding: FlutterPluginBinding) {
Log.d(Constants.TAG, "onDetachedFromEngine: ")
}
/**=============================ActivityAware===============================*/
override fun onAttachedToActivity(binding: ActivityPluginBinding) {
Log.d(Constants.TAG, "onAttachedToActivity: ")
mLifecycle = (binding.lifecycle as HiddenLifecycleReference).lifecycle
}
override fun onDetachedFromActivity() {
Log.d(Constants.TAG, "onDetachedFromActivity: ")
mLifecycle = null
}
override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
Log.d(Constants.TAG, "onReattachedToActivityForConfigChanges: ")
onAttachedToActivity(binding)
}
override fun onDetachedFromActivityForConfigChanges() {
Log.d(Constants.TAG, "onDetachedFromActivityForConfigChanges: ")
onDetachedFromActivity()
} }
}
override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
channel.setMethodCallHandler(null)
}
} }
package com.clx.navigation.clx_map_navigation
object Constants {
const val TAG = "ClxMapNavigationPlugin"
const val VIEW_TYPE = "clx_map_navigation"
}
\ No newline at end of file
package com.clx.navigation.clx_map_navigation
import androidx.lifecycle.Lifecycle
/**
* @author whm
* @date 2020/11/8 6:17 PM
* @mail hongming.whm@alibaba-inc.com
* @since
*/
interface LifecycleProvider {
val lifecycle: Lifecycle?
}
\ No newline at end of file
package com.clx.navigation.clx_map_navigation
import android.content.Context
import android.util.Log
import io.flutter.plugin.common.BinaryMessenger
import com.clx.navigation.clx_map_navigation.LifecycleProvider
import io.flutter.plugin.platform.PlatformViewFactory
import io.flutter.plugin.common.StandardMessageCodec
import io.flutter.plugin.platform.PlatformView
import com.clx.navigation.clx_map_navigation.NavigationPlatformViewFactory
import com.clx.navigation.clx_map_navigation.NavigationPlatformView
/**
* @author whm
* @date 2020/10/27 4:08 PM
* @mail hongming.whm@alibaba-inc.com
* @since
*/
internal class NavigationPlatformViewFactory(
private val messenger: BinaryMessenger,
private val lifecycleProvider: LifecycleProvider
) : PlatformViewFactory(StandardMessageCodec.INSTANCE) {
override fun create(context: Context, viewId: Int, args: Any?): PlatformView {
Log.d(Constants.TAG, "create: ")
return NavigationPlatformView(
context,
messenger,
viewId,
args,
lifecycleProvider
)
}
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论