QT Android开发 URL转本地路径

前言:Android系统通过FileDialog选择文件返回的文件URL和PC上不同,如我选择了Download文件夹的一个21929410_Offset Image0文件,返回的URL路径确是:content://com.android.externalstorage.documents/document/primary%3ADownload%2F21929410_Offset Image0。这是因为从Android5.0之后引入了Storage Access Framework (SAF),该框架允许用户在应用间共享文件,且提供了一个统一的方式来访问设备的文件系统。为了保护用户隐私和数据安全,应用不能直接访问设备的文件路径。

解决办法:QT并不提供将转换这种URL的功能,只能使用Java那边转换,有两个点需要注意下

1.通过FileDialog打开文件管理器后,"最近","图片","视频”,这些是属于Android自身的内容提供者(Content Providers)来管理和封装不同类型的文件存储。比如从"下载内容"里访问某个文件获取到的URL和直接从Download文件夹下访问这个文件返回的URL是不同的。在转换路径时注意判断各种情况。

2. 在Android10及之后的版本中,文件的隐私性做了进一步提升,从"下载内容"访问文件,返回的URL路径做了进一步“加密”。比如我访问了"下载内容"下的21929410_Offset Image0文件,返回的URL路径确是content://com.android.providers.downloads.documents/document/msf%3A43979。这时已经没办法再转换成本地路径了,通过QFile直接读取这个URL也读取不到,我这里的解决办法是暂时把这个文件拷贝到了本地的沙盒目录下,并返回这个文件的路径进行访问。

以下为路径转换代码

public static String getPathFromUri(Context context, Uri uri) {
        St
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值