kotlin根据文件的filePath转化为uri

这篇具有很好参考价值的文章主要介绍了kotlin根据文件的filePath转化为uri。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法实现

使用File类来创建一个文件对象,然后通过FileProvider来获取文件的URI

import android.content.Context
import android.net.Uri
import androidx.core.content.FileProvider
import java.io.File

fun getFileUri(context: Context, filePath: String): Uri {
    val file = File(filePath)
    return FileProvider.getUriForFile(context, context.packageName + ".fileprovider", file)//["context.packageName + ".fileprovider"]与AndroidManifest.xml中配置的authority一致。
}

getFileUri函数接受一个Context对象和文件的路径filePath作为参数,然后使用File类创建文件对象,最后通过FileProvider.getUriForFile方法将文件转换为URI。

添加配置

1. 在AndroidManifest.xml文件中配置了FileProvider。
AndroidManifest.xml文件配置FileProvider的authority。在使用FileProvider时,需要在AndroidManifest.xml文件中正确配置FileProvider的authority,以便系统能够正确识别和处理文件URI。

<application>

    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="xx.xx.xx.xx.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>
</application>

android:authorities属性指定了FileProvider的authority,需要与上面FileProvider.getUriForFile方法中传递的authority一致。

2. 在res/xml目录下创建一个名为file_paths.xml的文件,用于指定FileProvider的路径配置。这个文件中定义了应用程序可以访问的文件路径。
在res/xml目录下创建一个名为file_paths.xml的文件,用于指定FileProvider的路径配置。如果没有xml目录,可以手动创建。

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path name="external_files" path="." />
</paths>

方法调用:

在使用这个函数时,您可以传入当前的Context对象和文件的路径,然后获取文件的URI。
请注意,由于Android 10及以上版本对文件访问权限进行了更严格的限制,因此在处理文件时需要特别注意权限问题。
权限申请:


    private fun applyPermission() {
        if (Build.VERSION.SDK_INT >= 23) {
            val allPermissions = arrayOf(
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.READ_EXTERNAL_STORAGE
            )
            var needapply = false
            for (i in allPermissions.indices) {
                val checkPermission = ContextCompat.checkSelfPermission(
                    applicationContext,
                    allPermissions[i]
                )
                if (checkPermission != PackageManager.PERMISSION_GRANTED) {
                    needapply = true
                }
            }
            if (needapply) {
                ActivityCompat.requestPermissions(this, allPermissions, 1)
            }
        }
    }

Activity中,this关键字表示当前的Activity对象,因为Activity本身就是一个Context,所以可以直接将this传递给getFileUri函数。

applyPermission()
val fileUri = getFileUri(this, filePath)

拓展

Q:FileProvider的authority有什么作用?
A:FileProvider的authority是用于唯一标识FileProvider、授权访问文件、权限控制以及生成安全的URI的重要参数文章来源地址https://www.toymoban.com/news/detail-858933.html

到了这里,关于kotlin根据文件的filePath转化为uri的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 安卓开发语言kotlin与Java该如何选择

            如今在Android开发中,应用层开发语言主要是Java和Kotlin,Kotlin是后来加入的,主导的语言还是Java。kotlin的加入仿佛让会kotlin语言的开发者更屌一些,其实不然。         有人说kotlin的引入是解决开发者复杂的逻辑,并且对空指针控制的比较友好,但是我们在开

    2024年02月11日
    浏览(33)
  • R语言丨根据VCF文件自动填充对其变异位点并生成序列fa文件

    首先提出一个问题 : 假如有一个重测序结果VCF文件,里面包含了很多个样本在几百个突变位点(snp和iad)的基因型数据,现在想根据这份原始数据,得到一个fasta序列文件,包含每个样品在这些位点的各自序列信息,应该怎么做? 方法一:Excel手工处理 将vcf文件转成Excel表格

    2024年02月03日
    浏览(31)
  • Android 调用系统文件选择器读取Uri并获得文件名

    需要申请权限读写外部文件,在Manifest文件中输入以下代码对权限进行声明,分别是读外部文件权限和写外部文件权限: 运行效果: 直接复制就能用,没效果你来砍我

    2024年02月08日
    浏览(34)
  • 手把手QQ机器人制作教程,根据官方接口进行开发,基于Python语言制作的详细教程(更新中)

    QQ开放平台官方地址:https://q.qq.com/#/app/bot QQ开放平台包含:QQ机器人、QQ小程序、QQ小游戏,我们这边选择QQ机器人。 机器人类型:设置私域机器人或者公域机器人,当然公域机器人对于服务器的要求过高,我们这边选择 私域机器人 进行开发。 特别注意在选择沙箱频道的时候

    2023年04月08日
    浏览(44)
  • R语言丨根据VCF文件设计引物,自动识别两样本差异SNP位点,调用samtools获取上下游参考序列

    今天碰到一个 新问题 :假如有一个vcf文件储存了两个样品的变异位点基因型数据,每行代表一个位点,我现在想找出两样本差异的SNP位点,再把差异位点用[REF/ALT]的形式表示,然后将其在参考基因组上下游100bp的序列找出来放在差异位点前后位置,得到一个序列文本,用于设

    2024年02月15日
    浏览(25)
  • 2023年最新IDEA中 Java程序 | Java+Kotlin混合开发的程序如何打包成jar包和exe文件(gradle版本)

    一. JAVA | JAVA和Kotlin混开开发的程序打包成jar方法 1.1 方法一 :IDEA中手动打包 1.2 方法二 :build.gradle中配置后编译时打包 二. JAVA | JAVA和Kotlin混合开发的程序打包成exe的方法 纯JAVA | 纯Kotlin | JAVA和Kotlin混合开发打包其实都一样的,因为jar包中主要还是class文件,而kotlin在编译后

    2024年02月12日
    浏览(45)
  • 将一段C语言转化为Verilog

    有时需要先用C语言完成某些设计,通过成熟的仿真软件验证后再转化为Verilog代码  上面是一个将平方数开方的算法,将其转化为verilog代码        代码中重要的是,在C语言中,代码是顺序执行的,且可以把赋值语句加在循环的任何一个地方,因此本次循环可以使用本次循环

    2024年02月12日
    浏览(20)
  • 系统语言德语时浮点数转化问题

    游戏上线后,玩家反馈系统语言为德语时会有问题,经排查测试,发现是德语的浮点数转化,也就是float.parser对于德语来说会有问题。 在中国和英国,表示小数是用 小数点,即:0.123。但是在德国,表示小数则是用 逗号,即 0,123。德国的浮点数没有\\\".\\\"一说。float.Parse(“0.12

    2024年01月16日
    浏览(22)
  • E: 文件 list 第 1 行的记录格式有误 /etc/apt/sources.list.d/docker.list (URI)

    E: 文件 list 第 1 行的记录格式有误 /etc/apt/sources.list.d/docker.list (URI) 按提示找到docker.list删除就可以 在docker.list同目录下,打开终端 输入:sudo su rm -f docker.list 即可

    2024年02月07日
    浏览(31)
  • Android将Uri转为路径字符串(适配安卓全版本)并使用第三方应用打开文件(适配Android7.0+)

    做这个功能时在网上找了无数篇例子,有些方法是有问题的,故自己写一篇完整实现的总结,作备忘也作案例。顺便说一句,Android对存储权限的给予真的越来越严格 目录 1.Uri转为路径String以获得文件名  2.获取文件后缀名 3.通过后缀名获取文件MIME类型  4.设置Intent的Uri与权限

    2024年02月19日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包