Uri解析_安卓软件开发教程-查字典教程网
Uri解析
Uri解析
发布时间:2018-02-01 来源:查字典编辑
摘要:从第三方拿到的uri为:content://com.alivecor.aliveecg.fileprovider/temp_ecg_repo...

从第三方拿到的uri为:content://com.alivecor.aliveecg.fileprovider/temp_ecg_reports/ecg-20170421-150341.pdf。如何获得文件的绝对路径。根据网上的好多方法拿不到,请各位路过的大神指点。

回复讨论(解决方案)

参考了http://blog.csdn.net/dj0379/article/details/50765021这篇博文,按照这个进行也没有得到,甚是疑惑! http://blog.csdn.net/dj0379/article/details/50765021 http://blog.csdn.net/dj0379/article/details/50765021 哎呀,弄错了。我想打开这个网页看看的,结果给发回复了,好尴尬。。。 看你这个URI content://com.alivecor.aliveecg.fileprovider/temp_ecg_reports/ecg-20170421-150341.pdf

其实就是绝对路劲了吧   你看看手机andoid/data文件夹下有没有com.alivecor.aliveecg.fileprovider/temp_ecg_reports/ecg-20170421-150341.pdf这个文件或文件夹。

应该是要用注册ContentResolver 来获取吧。并且Content Provider 要说明了他公开了。

http://blog.csdn.net/dj0379/article/details/50765021 哎呀,弄错了。我想打开这个网页看看的,结果给发回复了,好尴尬。。。

不是绝对路径啊,前面的是它的authority,/temp_ecg_reports/ecg-20170421-150341.pdf这部分是path。不知道这个path是不是就是文件的相对路径啊?         < provider

            android:name="android.support.v4.content.FileProvider"

            android:authorities="com.ckt.fileproviderservice"

            android:exported="false"

            android:grantUriPermissions="true" >

            < meta-data

                android:name="android.support.FILE_PROVIDER_PATHS"

                android:resource="@xml/filepath" / >

        < /provider >

android:name --- 定义名子 

android:authorities --定义authority

android:exported="false"  对其它应用不可用

android:grantUriPermissions="true"  既然对其它应用不可用,只能授予content uri临时权限

< meta-data >中的 android:name="android.support.FILE_PROVIDER_PATHS" (这个名子是固定的)和

                            android:resource 指向一个xml文件,这个xml文件定义了要共享文件的路径

xml/filepath.xml

 

< paths >

    < files-path name="my_images" path="image/" / >

 

    < external-path name="my_external" / >

 

    < cache-path name="my_cache" / >

< /paths >

< files-path >  指向的是内部存储要共享的目录 

< external-path > 指向外部存储要共享的目录 

< cache-path > 指向缓存要共享的目录

其中name为我们自己定义 的名子,path为具体的路径

如果请求一个default_image.jpg的 content uri,FileProvider返回的 content URI是这样的

content://com.ckt.fileproviderservice/my_images/default_image.jpg

你确定提供路径的APP   android:exported="false"  对其它应用不可用   是否设置了其他程序可用?

你的应用有获取权限?

http://blog.csdn.net/zwlove5280/article/details/50509224         < provider

            android:name="android.support.v4.content.FileProvider"

            android:authorities="com.ckt.fileproviderservice"

            android:exported="false"

            android:grantUriPermissions="true" >

            < meta-data

                android:name="android.support.FILE_PROVIDER_PATHS"

                android:resource="@xml/filepath" / >

        < /provider >

android:name --- 定义名子 

android:authorities --定义authority

android:exported="false"  对其它应用不可用

android:grantUriPermissions="true"  既然对其它应用不可用,只能授予content uri临时权限

< meta-data >中的 android:name="android.support.FILE_PROVIDER_PATHS" (这个名子是固定的)和

                            android:resource 指向一个xml文件,这个xml文件定义了要共享文件的路径

xml/filepath.xml

 

< paths >

    < files-path name="my_images" path="image/" / >

 

    < external-path name="my_external" / >

 

    < cache-path name="my_cache" / >

< /paths >

< files-path >  指向的是内部存储要共享的目录 

< external-path > 指向外部存储要共享的目录 

< cache-path > 指向缓存要共享的目录

其中name为我们自己定义 的名子,path为具体的路径

如果请求一个default_image.jpg的 content uri,FileProvider返回的 content URI是这样的

content://com.ckt.fileproviderservice/my_images/default_image.jpg

你确定提供路径的APP   android:exported="false"  对其它应用不可用   是否设置了其他程序可用?

你的应用有获取权限?

http://blog.csdn.net/zwlove5280/article/details/50509224

        < provider

            android:name="android.support.v4.content.FileProvider"

            android:authorities="com.ckt.fileproviderservice"

            android:exported="false"

            android:grantUriPermissions="true" >

            < meta-data

                android:name="android.support.FILE_PROVIDER_PATHS"

                android:resource="@xml/filepath" / >

        < /provider >

android:name --- 定义名子 

android:authorities --定义authority

android:exported="false"  对其它应用不可用

android:grantUriPermissions="true"  既然对其它应用不可用,只能授予content uri临时权限

< meta-data >中的 android:name="android.support.FILE_PROVIDER_PATHS" (这个名子是固定的)和

                            android:resource 指向一个xml文件,这个xml文件定义了要共享文件的路径

xml/filepath.xml

 

< paths >

    < files-path name="my_images" path="image/" / >

 

    < external-path name="my_external" / >

 

    < cache-path name="my_cache" / >

< /paths >

< files-path >  指向的是内部存储要共享的目录 

< external-path > 指向外部存储要共享的目录 

< cache-path > 指向缓存要共享的目录

其中name为我们自己定义 的名子,path为具体的路径

如果请求一个default_image.jpg的 content uri,FileProvider返回的 content URI是这样的

content://com.ckt.fileproviderservice/my_images/default_image.jpg

你确定提供路径的APP   android:exported="false"  对其它应用不可用   是否设置了其他程序可用?

你的应用有获取权限?

http://blog.csdn.net/zwlove5280/article/details/50509224

我从第三方的意图中可以得到uri,我如何从uri中获得文件的路径或者获得这个文件 问题已经解决了,我的主要意图就是从第三的内容提供者中获取到资源。我采用了如下方法:

                                       ParcelFileDescriptor mInputPFD;

try {

mInputPFD = context.getContentResolver().openFileDescriptor(uri, "r");

} catch (FileNotFoundException e) {

e.printStackTrace();

Log.e("MainActivity", "File not found.");

return;

}

// Get a regular file descriptor for the file

FileDescriptor fd = mInputPFD.getFileDescriptor();

// Read the file

FileInputStream in=new FileInputStream(fd);

try {

FileOutputStream out = new FileOutputStream(file);

try {

IOUtils.copy(in, out);

Log.e("TAG", "IO复制文件!!");

} finally {

out.close();

}

} finally {

in.close();

}

String absolutePath = file.getAbsolutePath();

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新安卓软件开发学习
    热门安卓软件开发学习
    编程开发子分类