我正在尝试为共享文件设置文件提供程序。我的文件保存在外部存储器的“AppName”文件夹中(与Android、电影和图片文件夹的级别相同)。
以下是我的文件提供程序配置:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.mydomain.appname.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
以及文件路径。xml:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="mypath" path="AppName" />
</paths>
当我试图访问我的文件:
Uri fileUri = FileProvider.getUriForFile(activity, "com.mydomain.appname.fileprovider",
new File("/storage/emulated/0/AppName/IMG_20160419_095211.jpg"));
它返回一个错误:java。lang.IllegalArgumentException:未能找到包含/storage/emulated/0/AppName/IMG_20160419_095211的配置根目录。Android的jpg。支持v4。所容纳之物FileProvider$SimplePathStrategy。android上的getUriForFile(FileProvider.java:678)。支持v4。所容纳之物文件提供者。getUriForFile(FileProvider.java:377)
以前,当我使用内置目录(如图片或电影、文件路径)时,它工作得很好。xml的定义如下:
<external-path name="photos" path="Pictures" />
<external-path name="videos" path="Movies" />
但是现在我想把我的文件存储在我自己的文件夹里。我错过了文件提供商配置的东西吗?
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external_files"
path="." />
<external-files-path
name="external_files"
path="." />
<!-- FOR SD CARD-->
<root-path
name="sdcard1"
path="." />
</paths>
首先,我知道这是一篇老文章,但这是与我的问题相似的最接近的问题,所以我将发布我的解决方案。
出现该错误的原因是因为您在提供程序文件中提供的路径是
外部路径中
它返回找不到已配置的根目录,该根目录包含
因为它找不到该文件夹。因此,请确保只编写要共享的目录,并确保其拼写正确。请记住,当您声明
外部路径时,它等同于调用
环境。getExternalStorageDirectory()
由于在创建文件时写入目录名,因此不需要在提供程序文件中提供路径,因为它所做的只是用名称屏蔽路径中的任何值。
因此,您的提供者路径将是:
您的代码是:
File file = new File(new File(Environment.getExternalStorageDirectory(), "myfolder"), "file.ext");
Uri uri = FileProvider.getUriForFile(context, fileProvider, file);
你的uri路径会产生以下结果
content://fileprovider/my_files/myfolder/file.ext
如果您在提供者文件中提供了一个路径,那么您的uri路径将如下所示:
content://fileprovider/my_files/file.ext
<files-path name="name" path="path" />
表示应用内部存储区域的file/子目录中的文件。此子目录与Context.getFilesDir()返回的值相同。
<external-path name="name" path="path" />
表示外部存储区域根目录中的文件。此子目录的根路径与Environment.getExtranalStorageDirectory()返回的值相同。
<external-files-path name="name" path="path" />
表示应用外部存储区域根中的文件。此子目录的根路径与Context#getExtranalFilesDir(String)Context.getExtranalFilesDir(null)返回的值相同。
如何使用从辅助外部存储器提供文件? 的当前实现只处理 看来,没有办法定义一个
问题内容: 我的开发电话正在运行。 在我的应用程序中,我试图在外部存储上创建一个文件夹,该文件夹将存储我的应用程序的调试信息。基本上,它将包含应用程序执行的所有命令,因此,当用户遇到问题时,我可以选择使它们从debug文件夹发送信息给我进行分析。 我首先尝试将文件写入文件夹,但发现创建文件夹时出错。最初,我使用,然后又移至也不起作用。 我有我的清单。 这是用于创建文件夹的代码: 这是我也尝试过的:
众所周知,谷歌颠覆了Android11的授权概念,并彻底改变了它。 我看了Android留档丛林,但没有找到答案的问题是否仍然可以在外部存储(名为 /storage/emulated/0/)的根目录中创建一个文件夹。如果是,如何? 我的应用在Android上写 临时解决办法可以是这样的: 但这并不理想。如果用户从Android10切换到Android11,那么就有一个大问题。我需要什么额外的代码才
我正在制作一个soundboard应用程序,当长按按钮1时,我需要共享sound1。我可以用以下代码创建共享菜单: 我可以与whatsapp和Google Drive完美共享音频文件,但其他应用程序不起作用。我听说您必须将文件复制到外部存储,并从那里共享它们。我已经搜索了将近两天,但我找不到这样做的方法。Stack上的其他文章也帮不了我:/ 如何在外部存储器中创建目录,将文件(sound1.ogg
我正在使用QAF,这是一个很棒的工具,但我有一个问题。有没有什么方法可以像在BDD文件中那样使用自定义数据提供程序参数化cucumber功能步骤? 例如,我们可以从外部文件插入数据 在里面BDD是这样做的: