如何解决Android 光标不适用于带有 Android 嵌入 v2 的 Flutter 插件
我在Android中使用插件获取文件的绝对路径,帮助类为this one.。
上一个链接是 Flutter 插件的一个分支,它返回照片库中照片的绝对路径,带有 Flutter 嵌入 V1 并且正常工作。 Uri 是 content://media/external/images/media/41
。
现在我正在尝试将其调整为带有 Flutter Android 嵌入 V2 的插件。叉子是here。如您所见,here 我使用硬编码的 Uri 直接调用助手:
FileDirectory.getAbsolutePath(context,Uri.parse("content://media/external/images/media/41"))
在辅助类中,基本上是其他插件的复制粘贴,程序在 this 段代码上返回错误:
private fun getDataColumn(context: Context,uri: Uri,selection: String?,selectionArgs: Array<String>?): String? {
var cursor: Cursor? = null
val column = "_data"
val projection = arrayOf(column)
try {
cursor = context.contentResolver.query(uri,projection,selection,selectionArgs,null)
if (cursor != null && cursor.moveToFirst()) {
val column_index = cursor.getColumnIndexOrThrow(column)
return cursor.getString(column_index)
}
} finally {
cursor?.close()
}
return null
}
上面的代码在 Flutter 嵌入 V1 上正常工作但在 V2 上不。经过一些肮脏的调试后,我明白了:
对于带有 Android 嵌入 V1 的 Flutter 插件:
context
类型等于 io.flutter.app.FlutterApplication
cursor!!.moveToFirst()
为真
cursor!!.getCount()
是 1
对于带有 Android 嵌入 V2 的 Flutter 插件:
context
类型等于 android.app.Application
cursor!!.moveToFirst()
为假
cursor!!.getCount() is
0
我认为问题在于插件如何获取应用程序上下文,因为 V1 由 Registrar
给出:
companion object {
@JvmStatic
fun registerWith(registrar: Registrar) {
val channel = MethodChannel(registrar.messenger(),"flutter_absolute_path")
channel.setMethodCallHandler(FlutterAbsolutePathPlugin(registrar.context()))
}
}
相反,对于 V2,由 ActivityAware
给出,如此 answer 所示:
private fun doOnAttachedToEngine(messenger: BinaryMessenger) {
methodChannel = MethodChannel(messenger,"flutter_file_dialog")
methodChannel?.setMethodCallHandler(this)
context = pluginBinding!!.applicationContext
}
另一件事是,如果我尝试在我的应用程序中使用带有 embeddingV1 的插件,则会出现以下错误,因此我无法使用它。
java.lang.RuntimeException: Unable to start activity ComponentInfo{net.altermundi.elrepoio/net.altermundi.elrepoio.MainActivity}: java.lang.IllegalStateException: registrar.context() must not be null
解决方法
在将代码清理到最低限度后,我开始工作了。 Flutter embeddingv2 插件可能有问题,但使用 this 可以。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。