android应用复制文件到u盘

文章讲述了在Android11环境下,开发者如何在获取U盘路径时处理权限问题,从最初的传统方法到遇到的权限限制,最后介绍使用FireflyApi2的execSuCmd来执行命令解决复制文件问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚开始觉得简单,不就是找到u盘路径,打开文件写入文件

 fun getUsbPath(): String? {
        val usbRoot = File("/mnt/media_rw")
        if (usbRoot.exists() && usbRoot.isDirectory()) {
            val usbFiles = usbRoot.listFiles()
            if (usbFiles != null && usbFiles.size > 0) {
                return usbFiles[0].absolutePath
            }
        }
        return ""
    }
    fun copyFileToUsb( sourcePath: String?, usbPath: String?):Int {
        val sourceFile = File(sourcePath,DB_NAME)
        try {
            val uPath = File(usbPath+"/Download")
            Log.d("validate", "DataMngActivity usbPath : $usbPath/Download")
            if (!uPath.exists()) {
                uPath.createNewFile() // 创建文件夹
            }
            val usbFile = File(usbPath+"/Download/"+DB_NAME)
            FileInputStream(sourceFile).use { fis ->
                FileOutputStream(usbFile).use { fos ->
                    val buffer = ByteArray(1024)
                    var length: Int
                    while (fis.read(buffer).also { length = it } > 0) {
                        fos.write(buffer, 0, length)
                    }
                    fos.getFD().sync();
                    return 0;
                }
            }
        } catch (e: IOException) {
            e.printStackTrace()
            // Handle exception
        }
        return 1;
    }

另外在配上权限啥的,谁知道不插u盘,其他系统文件路径可以,换了u盘报没权限,几次搜索发现android11后有些权限用法不管用了 

Runtime.getRuntime().exec("cp 也不行

后来发现一个能行的办法

 FireflyApi2.getInstance().execSuCmd("cp "+rootPath_Db+"/"+DB_NAME+" "+f+"/"+DB_NAME);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值