我使用一个插件来获取Android中文件的绝对路径,助手类是这一个。。
前面的链接是一个来自颤振插件的分叉,它返回照片库中照片的绝对路径,带有颤振嵌入的V1和正常工作。Uri是content://media/external/images/media/41。
现在,我正在尝试将其应用到一个带有颤振Android嵌入V2的插件中。叉子是这里。正如您可以看到的那样,这里使用硬编码的Uri直接调用助手:
FileDirectory.getAbsolutePath(context, Uri.parse("content://media/external/images/media/41"))在helper类中,这基本上是另一个插件的复制粘贴,程序返回这代码上的错误:
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
}上面的这段代码在颤振嵌入V1 上正确地工作,而在V2上没有。经过一些肮脏的调试后,我了解到:
对于Android嵌入V1的颤振插件:
context类型等于io.flutter.app.FlutterApplication
cursor!!.moveToFirst()是真的
cursor!!.getCount()为1
对于Android嵌入V2的颤振插件:
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给出的,如本回答所示
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发布于 2021-07-13 14:43:14
在把代码清理到最低限度后,我就开始工作了。可能是embeddingv2插件出了问题,但是使用这是可行的。
https://stackoverflow.com/questions/68302885
复制相似问题