Android 中使用 Kotlin 的文件复制 Flutter 插件

2024-03-26

尝试创建一个 Flutter 插件,将资产文件复制到本机应用程序文档文件夹。

对于 iOS,我通过以下代码实现了这一点(见下文)。

但是,由于我对 Android 架构了解不多,所以我想知道我的 Android MethodChannel 代码应该是什么样子。

我的 Flutter 插件的 Android 部分需要在 KOTLIN 中!

我需要将文件从 Android 资产文件夹复制到 Android 文档文件夹 - 所有这些都在 Flutter 插件和 Kotlin 中完成!

再说一次,我已经用 Swift 准备好了 iOS。缺少的是 Kotlin 中的 Android 对应部分。你对此有什么帮助吗?

.

以下是 Swift 中 iOS FlutterMethodChannel 的工作代码:

(即,它将文件从主包复制到 iPhone 的文档目录...)

import UIKit

private func copyFile(fileName: String) -> String {

    let fileManager = FileManager.default
    let documentsUrl = fileManager.urls(for: .documentDirectory,
                                        in: .userDomainMask)
    guard documentsUrl.count != 0 else {
        return "Could not find documents URL"
    }

    let finalURL = documentsUrl.first!.appendingPathComponent(fileName)

    if !( (try? finalURL.checkResourceIsReachable()) ?? false) {
        let documentsURL = Bundle.main.resourceURL?.appendingPathComponent(fileName)
        do {
            try fileManager.copyItem(atPath: (documentsURL?.path)!, toPath: finalURL.path)
            return "\(finalURL.path)"
        } catch let error as NSError {
            return "Couldn't copy file to final location! Error:\(error.description)"
        }
    } else {
        return "\(finalURL.path)"
    }
}

在 Kotlin 中,我尝试了这个 - 但它根本不起作用......:(

import java.io.File

private fun copyFileTrial1(fileName: String): String {

  File src = new File("../../assets/${fileName}");
  File dst = new File("../../DocumentsFolder/${fileName}", src.getName());
  FileInputStream inStream = new FileInputStream(src);
  FileOutputStream outStream = new FileOutputStream(dst);
  FileChannel inChannel = inStream.getChannel();
  FileChannel outChannel = outStream.getChannel();
  inChannel.transferTo(0, inChannel.size(), outChannel);
  inStream.close();
  outStream.close();
  return "hello1"
}

或者我尝试了这个 - 但再次 - 完全没有成功:(

private fun copyFileTrial2(fileName: String): String {

    InputStream in = null;
    OutputStream out = null;
    try {
      in = assetManager.open(fileName);
      String outDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/X/Y/Z/" ; 
      File outFile = new File(outDir, filenfileNameame);
      out = new FileOutputStream(outFile);
      copyFile(in, out);
      in.close();
      in = null;
      out.flush();
      out.close();
      out = null;
    } catch(IOException e) {
      Log.e("tag", "Failed to copy asset file: " + fileName, e);
    }       
    return "hello2"
}

private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
      out.write(buffer, 0, read);
    }
}

我终于找到了 Kotlin 中文件复制问题的解决方案!

它对于实现我的第一个 Flutter 插件特别有帮助。 https://pub.dartlang.org/packages/large_file_copy

这是 Kotlin 中文件复制的解决方案

    import java.io.File
    import java.io.InputStream
    import io.flutter.util.PathUtils

    private fun copyFile(fileName: String): String {

      val assetStream: InputStream = mRegistrar.context().assets.open(fileName)
      val appliationDocumentsFolderPath: String = PathUtils.getDataDirectory(mRegistrar.context())
      val outputFilePath: String = appliationDocumentsFolderPath + "/" + fileName

      if (!File(outputFilePath).exists()) {
        File(outputFilePath).copyInputStreamToFile(assetStream)   
      }
      return outputFilePath
    }

    private fun File.copyInputStreamToFile(inputStream: InputStream) {
      inputStream.use { input ->
        this.outputStream().use { fileOut ->
          input.copyTo(fileOut)
        }
      }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中使用 Kotlin 的文件复制 Flutter 插件 的相关文章

  • 将图像从 Android 上传到 GCS

    我正在尝试将图像从 Android 直接上传到 Google 云存储 但API似乎不起作用 他们有一些与 App 引擎相关的 Java 示例 我没有看到任何被证明可以在 Android 上运行的示例 在 Android 上 我尝试使用 js
  • 在 Kotlin 中将 Dp 转换为 Px - 这种转换永远不会成功

    我在使用 Kotlin 编码时遇到了问题 我复制粘贴了一个java代码示例 https stackoverflow com a 9685690 6818446将 DP 转换为像素 以便将其作为以编程方式设置填充的参数 我原本期望 IDE 能
  • Android Canvas.DrawBitmap 没有模糊/抗锯齿?

    我正在尝试使用精灵 或非常像素化的角色 背景等 制作一个Android游戏 我把它们画在画布上 就像这样 matrix preScale xrat yrat canvas drawBitmap img matrix null 其中 img
  • audioTrack play() 只播放一次

    第一次使用Android的AudioTrack 我创建了一个 AndroidAudioDevice 类 我用这个构造函数初始化它 public AndroidAudioDevice constructor Log i Audio const
  • Android中如何制作传统蒙古文ListView

    如何在 Android 应用程序中为垂直蒙古文制作水平滚动的 ListView 背景 Android 对世界上许多语言都有相当好的支持 甚至是阿拉伯语和希伯来语等 RTL 语言 但是 没有内置对自上而下语言的支持 例如传统蒙古语 http
  • API 级别 15 的印地语字体(又名 Android 4.0.2)

    我有一个基于印地语内容的 Android 应用程序 并使用了 Android API 16 SDK 中的 devangiri 字体 并重命名为印地语 ttf 文本在 API 级别 16 和 17 上渲染良好 但在 Android API 级
  • 在 OpenGL ES 1.1 中将多个纹理绑定到一个网格

    如果我有一个网格 例如有 6 个面的立方体 每个面分别由 4 个顶点组成 总共 24 个顶点 并且我想对每个面应用不同的纹理 我该怎么做 目前 我使用 glDrawElements 一次绘制整个网格 立方体的所有 6 个面 将所有索引提供到
  • 如何在屏幕上动态移动 Textview? (框架布局)

    我有一个应用程序 可以在屏幕上的 FrameLayout 上显示相机视图 屏幕处于固定风景模式 我需要编写一个带有动态确定的屏幕坐标的textView 坐标以百分比确定 例如 将文本视图写入屏幕坐标 x 80 y 20 屏幕上 将文本视图写
  • 原生编程对于移动开发有何优势?

    我需要为一家公司在一些主要的移动操作系统上开发应用程序 特别是 iOS Android 和 WP7 我最初计划为三种不同的操作系统编写三个独立的应用程序 每个应用程序都使用本机 SDK 然而 这样做有什么好处吗 有许多可用的跨平台工具 Se
  • 如何布局文本以围绕图像流动

    你能告诉我是否有一种方法来布局文本 围绕图像 像这样 text text text text text text text text text text text text text text text text text 我已经收到一位
  • Android 计费客户端库:如何指定开发人员有效负载(额外数据)

    我正在尝试使用新的Android计费客户端库 1 0 https developer android com google play billing billing library html 以前 在尝试执行购买时 可以选择向意图添加额外的
  • 使用 Bixolon R200 进行打印的 Android 应用程序

    我正在开发一个 Android 应用程序 用于使用 Bixolon R200 进行打印 我在工作中使用 bxlprint jar 的类 当我想打印波斯字符串时 打印机打印奇怪的字符 我使用UTF 8和UTF 16进行编码 你能帮我吗 Str
  • 如何将数据一次性插入sqlite数据库

    我需要将数据添加到 sqlite 数据库一次 也就是说 我希望我的应用程序的用户看到该数据已加载 如何做到这一点 我使用查询执行了它 INSERT INTO TABLE NAME VALUES 值1 值2 值3 值N 但是每次应用程序打开该
  • 如何在外部浏览器中打开 Android 应用程序中的链接?

    任何人都可以帮助我在代码中打开外部浏览器或其他 Android 应用程序中的链接吗 现在的情况是链接在应用程序本身中打开 但如果该链接属于 Android 应用程序 则无法打开 它显示安装 Android 应用程序 所以我希望如果链接可以在
  • 从alertDialog构建器获取editText值

    我是新来的android 我需要得到editText s搜索某些东西的价值 但是当我运行程序时 出现错误null pointer exception EditText etSearch 没有获取它的文本 请帮我 谢谢 public bool
  • onCreateOptionsMenu(菜单菜单)是什么

    方法中的Menu和menu两个参数是什么onCreateOptionsMenu Menu menu 以及如何使用这个方法 我还有一个问题为什么this参数用于 Intent intent new Intent this DisplayMes
  • 如何在 Android Studio 中为单独的模块生成签名的 APK?

    我的项目有 3 个模块 include app include videograbber include audiograbber 现在我想为Videograbber模块生成签名的APK 当我在 Android Studio 中使用 生成签
  • 抱歉,该视频无法在视频视图中播放?

    freinds 我正在使用以下代码在我的应用程序中显示 mp4 视频 并面临以下问题 我在 google 和 stackoverflow 上看到了很多与这个问题相关的帖子 但每个人都给出了自己的建议 并且没有共同的答案 1 我在模拟器中看不
  • 隐式意图和显式意图之间的区别[重复]

    这个问题在这里已经有答案了 我对之间的区别感到困惑implicit and explicit意图 隐式意图和显式意图的目的是什么 为什么使用这些概念 我是 Android 应用程序的新手 所以请提供一些示例 隐式活动调用 使用意图过滤器 您
  • Eclipse 中的 Android 框架源码级调试

    Android 框架的 Java 源代码可从 source android com 获取 我可以下载它们并将其提供给 Eclipse 以便在调试时进入框架方法吗 更好的是 有人知道 Eclipse 插件可以根据需要自动从 Android G

随机推荐

  • 如果在 JQuery 中未选中所有子节点,则取消选中父节点

    如果所有子节点都未选中 我想取消选中父节点 ul li li ul
  • 判断服务器是否支持resume get请求

    如何确定服务器是否支持恢复文件传输或获取请求 我的想法是设置标头以在字节 2 而不是 0 处启动 get 请求 如果给出正确的结果 则立即关闭 http 请求 但我想知道服务器对另一种探针的响应是否会向我透露此信息 要探测服务器的下载恢复功
  • VB.Net Excel Automation如何处理敏感度标签

    当我在 VB Net 中为用户创建 Excel 文件时 当我尝试保存文件时出现错误 当文件为只读时 您无法执行此操作 并且似乎是因为尚未选择敏感度标签 我无法找到任何有关在执行 Excel 自动化时处理敏感度标签的文档 因此我想知道是否有人
  • 服务器端处理的数据表上的“列索引”

    有谁知道如何添加列索引 to a 服务器端处理数据表 http www datatables net 基本上喜欢http www datatables net examples api counter columns html http w
  • 用c#在asp.net中发送邮件脚本

    请建议我一个代码发送邮件asp net 中的脚本C 我想建造调查表我想发送我的电子邮件 ID 上的所有信息 包括附件 主题和正文 try Assign a sender recipient and subject to new mail m
  • Windows XP 上的 Java 最大内存

    我一直能够为在 32 位 Windows XP Java 1 4 1 5 和 1 6 上运行的 Java SE 分配 1400 MB 的空间 java Xmx1400m 今天 我在使用 Java 1 5 16 和 1 6 0 07 的新 W
  • Javascript字符串nodejs流实现

    我需要一个将数据发送到字符串的nodejs 流 http nodejs org api stream html 实现 你认识什么人吗 直接地说 我正在尝试通过管道传输请求响应 如下所示 请求 http google com doodle p
  • 检查字符串变量是否具有整数值

    我正在开发一个项目 允许孩子们向圣诞老人发送消息 不幸的是 如果他们在 AGE 字段中输入字符串而不是整数 则程序会崩溃并返回 Conversion from string exampleString to type Double is n
  • 使用 RSA AES 提供程序生成自签名 1024 位 X509Certificate2 时出现问题

    我正在尝试使用以下命令生成 X509Certificate2 对象Microsoft AES 加密提供程序 https msdn microsoft com en us library windows desktop aa386979 28
  • .External2(C_dataviewer, x, title) 中的错误:无法启动数据查看器

    在 R 中 每次点击时都会出现以下错误View or data frame我不明白为什么 事情发生得很突然 gt View Fhat all Error in External2 C dataviewer x title unable to
  • 如何冻结设备特定的已保存模型?

    我需要冻结保存的模型以供服务 但某些保存的模型是特定于设备的 如何解决此问题 with tf Session config tf ConfigProto allow soft placement True as sess sess run
  • 性能分析 asp.net,什么是 ProcessRequestNotificationHelper?

    我正在对每秒 20 个用户的负载下的 ASP NET Web 应用程序进行性能分析 20 个用户基本上使应用程序瘫痪 并且无法加载任何内容 我正在使用 RedGate 性能分析器 但我不知道如何使用它 12 的时间花在我的代码上 我可以深入
  • 该程序无法启动,因为您的计算机缺少 MSVCR110.dll

    我正在尝试将 apache 服务器 2 4 安装到我的 Windows 计算机上 到目前为止我遇到了这个 常见 问题 但我无法解决它 标题中的错误消息继续出现 但我已经 成功 下载了缺少的必需项目的 32 位和 64 位版本http www
  • kubectl 从 gitlab 未经授权拉取镜像:HTTP Basic:访问被拒绝

    我正在尝试配置 gitlab ci 以将应用程序部署到谷歌计算引擎 我已成功将映像推送到 gitlab 存储库 但在应用 kubernetes 部署配置后 我在 kubectl 描述 pod 中看到以下错误 Failed to pull i
  • Java-应用程序背后的屏幕捕获

    有没有一种方法可以捕获屏幕但不显示应用程序本身 我知道如何最小化或使框架不可见 但这必须非常快地完成 因为它会在每秒发生很多次 至少每秒一次 我希望它看起来像 Windows Vista 7 中的放大镜 该应用程序可以看到自己的背后 Cal
  • 使用 iPhone SDK 以编程方式拨打电话号码并传递 DTMF

    如何通过 iPhone SDK 以编程方式执行以下操作 通过 iPhone SDK 以编程方式拨打电话号码 绕过拨号 取消iPhone 弹出的提示 拨打号码后发送额外的 DTMF 就像将暂停编程到普通电话中一样 我知道你可以做一个tel 呼
  • 在 HTML5 Web SQL 数据库中对日期时间进行排序

    我找不到解决我的问题的方法 我有一个 HTML5 Web SQL 数据库 其中有一个如下表 db transaction function tx tx executeSql CREATE TABLE IF NOT EXISTS todo t
  • 可拖动的平面列表不渲染任何内容

    我正在尝试为draggable flatlist编写一个简单的代码 相同的代码对于 FlatList 运行得非常好 在下面的代码中 如果我用 DraggableFlatList 替换 FlatList 尽管从渲染组件 TaskListTil
  • 为什么要在方法参数列表中添加void

    我见过具有以下签名的方法 void foo void 他们不接受任何争论 但我想知道这样做是否有用 您有理由这样做吗 这是旧版本 C 的遗留物 其中foo 意思是 具有未知数量参数的函数 并且foo void 意思是 零参数的函数 在 C
  • Android 中使用 Kotlin 的文件复制 Flutter 插件

    尝试创建一个 Flutter 插件 将资产文件复制到本机应用程序文档文件夹 对于 iOS 我通过以下代码实现了这一点 见下文 但是 由于我对 Android 架构了解不多 所以我想知道我的 Android MethodChannel 代码应