kotlin根据文件的filePath转化为uri

news/2024/9/23 20:12:48/

方法实现

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

kotlin">import android.content.Context
import android.net.Uri
import androidx.core.content.FileProvider
import java.io.Filefun 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><providerandroid:name="androidx.core.content.FileProvider"android:authorities="xx.xx.xx.xx.fileprovider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid: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及以上版本对文件访问权限进行了更严格的限制,因此在处理文件时需要特别注意权限问题。
权限申请:

kotlin">private fun applyPermission() {if (Build.VERSION.SDK_INT >= 23) {val allPermissions = arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE)var needapply = falsefor (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函数。

kotlin">applyPermission()
val fileUri = getFileUri(this, filePath)

拓展

Q:FileProvider的authority有什么作用?
A:FileProvider的authority是用于唯一标识FileProvider、授权访问文件、权限控制以及生成安全的URI的重要参数


http://www.ppmy.cn/news/1437956.html

相关文章

1分钟掌握 Python 函数参数

任何编程语言函数都是非常重要的一部分&#xff0c;而在进行函数调用时&#xff0c;了解函数的参数传递方式是非常有必要的。Python中支持哪些传参方式呢&#xff1f; Python中的传参方式是比较灵活的&#xff0c;主要包括以下六种&#xff1a; 按照位置传参按照关键字传参默…

vue2知识点————(vue插槽,透传 Attributes )

vue 插槽 插槽&#xff08;slot&#xff09;是一种强大的特性&#xff0c;允许在组件的模板中定义带有特定用途的“插槽”&#xff0c;然后在组件的使用者中填充内容。插槽能够使组件更加灵活&#xff0c;让组件的结构更容易复用和定 具名插槽&#xff08;Named Slots&#x…

Java openrasp记录-01

例子1 https://github.com/anbai-inc/javaweb-expression 一个hook ognl、spel、MVEL表达式注入的例子 用的是asm5进行字节码修改 采用premain进行插桩&#xff0c;重写transform方法 expClassList是要hook的类&#xff0c;这里定义在MethodHookDesc 这里判断hook点通过类名…

02 贪吃蛇

前言 呵呵 这是不知道 在哪里看到的 别人做的一个贪吃蛇 因此 也把我 之前的 贪吃蛇 移植上来了 当然 这个不过是为了 简单的入门了解, 呵呵 然后 c版本的贪吃蛇 需要先移植成 c 版本, 然后 再根据 单片机相关 设计调整 比如 led 点阵的输出, 比如 c99 语法的一些不兼容…

1小时学会SpringBoot3+Vue3前后端分离开发

首发于Enaium的个人博客 引言 大家可能刚学会Java和Vue之后都会想下一步是什么&#xff1f;那么就先把SpringBoot和Vue结合起来&#xff0c;做一个前后端分离的项目吧。 准备工作 首先你需要懂得Java和Vue的基础知识&#xff0c;环境这里就不多说了&#xff0c;直接开始。 …

Kotlin作用域函数引发的遮蔽问题

前面讲了kotlin的it变量引起的遮蔽问题&#xff0c;见Kotlin it隐式变量的遮蔽问题&#xff0c;本篇聊聊作用域函数&#xff08;scoped function&#xff09;可能引起的遮蔽问题。 先来看一个简单的示例&#xff1a; fun test(): String {val s: String "asdf".al…

selenium显式等待

selenium显示等待 确保页面元素在特定条件下加载完毕后再执行后续操作。显示等待可以通过WebDriverWait类和ExpectedConditions类来实现。通过使用显示等待&#xff0c;可以避免在页面元素还未加载完毕时就进行操作&#xff0c;从而提高测试的稳定性和可靠性。 # 导包 from s…

leetcode543--二叉树的直径

1. 题意 求二叉树上最远两个节点之间的距离。 2. 题解 2.1 暴力 最长路径的三种情况 通过根节点在左子树在右子树 12 4 5 6 7 8 9 diameter 5通过根节点的最长路径长度一定是左右子树深度之和。 但是这样求左右子树的深度会不断重复&#xff0c;所以复杂度…