Android-FileProvider学习——文件 *** 作

Android-FileProvider学习——文件 *** 作,第1张

概述一:content-url(content://)相比于file-url(file:///),安全很多。intent通过把uri设置为它的参数,并通过setFlags设置flag,可以让其他app获得该uri的临时访问。而file的话,授权是永久的,除非手动改变。二:使用fileProvider的步骤如下:<manifest>...<application>

一 : content-url(content://)相比于file-url(file:///),安全很多。intent通过把uri设置为它的参数,并通过setFlags设置flag,可以让其他app获得该uri的临时访问。而file的话,授权是永久的,除非手动改变。

二:使用fileProvIDer的步骤如下:

<manifest>     ...     <application>         ...         <provIDer             androID:name="androIDx.core.content.fileProvIDer" 固定             androID:authoritIEs="com.mydomain.fileprovIDer" 自定义,一般包名加provIDer就行             androID:exported="false"                       是否public,是否可被访问             androID:grantUriPermissions="true">       是否允许授予临时访问权限给文件             ...         </provIDer>         ...     </application> </manifest>

 

因为fileprovIDer只能给你“事先指定”的文件路径下的文件授权,所以我们需要指定哪些文件是可以被授权的:https://developer.androID.com/reference/kotlin/androIDx/core/content/fileProvIDer#specifying-available-files, paths标签下可以有1或多个元素,
<files-path name="这里是啥无所谓" path="." />-----------1
<external-path name="这里是啥无所谓" path="." />-------------2
似乎上面那里path那个路径我除了用 . , 其他都不行

 

<Meta-data         androID:name="androID.support.file_PROVIDER_PATHS"         androID:resource="@xml/file_paths" />    根据第二步的文件夹名,在第一步的标签下加上
如果在内部存储目录下放置一张图片“1.png”的话,要生成uri,首先第二步那里要采用1,然后这样生成:
val fileDir = context.applicationContext.filesDirval file = file(fileDir, "1.png")val contentUri:Uri = getUriForfile(getContext(), "com.mydomain.fileprovIDer", file)//fragment里用requireContext(), 第二个参数和第一步里的“自定义”对应
file的absolute path为:/data/user/0/包名/files/1.jpg尽管实际上是data/data/包名/files/1.pnguri打印出来是:content://自定义的那个/这里是啥无所谓的那个/1.png

如果在外部存储目录下放置图片,第二步那里要用2,然后这样:

val fileDir = context.applicationContext.getExternalfilesDir(Environment.DIRECTORY_PICTURES)//里面可以是Environment类里的其他常数val file = file(fileDir, filename)

val contentUri:Uri = getUriForfile(getContext(), "com.mydomain.fileprovIDer", file)//fragment里用requireContext(), 第二个参数和第一步里的“自定义”对应
file的absolute path为:
/storage/emulated/0/AndroID/data/包名/files/Pictures/filename

uri打印出来是:
content://自定义的那个权限名/这里是啥无所谓的那个/AndroID/data/包名/files/Pictures/filename

 

还可以灵活使用query和delete对content-uri进行 *** 作,如果要使用insert和update要继承fileProvIDer自定义。 总结

以上是内存溢出为你收集整理的Android-FileProvider学习——文件 *** 作全部内容,希望文章能够帮你解决Android-FileProvider学习——文件 *** 作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/998877.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存