Java 从我刚刚创建的文件中获取Uri(android)
请原谅我问了一个可能很愚蠢的问题,但我真的到处都找不到答案 我需要我的程序将EditText的内容保存为html文件,并与其他应用程序共享。为此,我需要将文件写入内部存储器,然后获取URI。然而,没有任何关于如何做到这一点的信息(我可以很好地理解) 这是我的代码(编辑器是活动的名称,myapp是包的名称): 据我所知,文件创建部分工作得很好;没有发现任何例外。但是,实际共享部分会因以下错误而崩溃:Java 从我刚刚创建的文件中获取Uri(android),java,android,file,uri,Java,Android,File,Uri,请原谅我问了一个可能很愚蠢的问题,但我真的到处都找不到答案 我需要我的程序将EditText的内容保存为html文件,并与其他应用程序共享。为此,我需要将文件写入内部存储器,然后获取URI。然而,没有任何关于如何做到这一点的信息(我可以很好地理解) 这是我的代码(编辑器是活动的名称,myapp是包的名称): 据我所知,文件创建部分工作得很好;没有发现任何例外。但是,实际共享部分会因以下错误而崩溃: java.lang.IllegalArgumentException: Failed to fin
java.lang.IllegalArgumentException: Failed to find configured root that contains /Lorem ipsum.html
当我试图找到URI时,我显然做错了什么,但我一直无法找到解决方案。遵循官方文件没有帮助,我找不到这个具体问题的例子
如果有必要,以下是我的fileprovider声明:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.myapp.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths" />
</provider>
提前感谢您的帮助。在您的代码中:
FileProvider.getUriForFile(Editor.this, "com.myapp.fileprovider", new File(filename))
第三个参数相当于:
new File("Lorem ipsum.html"");
这是无效的
您应该使用文件的完整路径作为文件的构造函数中的参数
正如@Fatih所评论的,您应该使用
new File(getFilesDir(), filename)
作为第三个参数
此外,清单中的权限
参数应更正为:
android:authorities="${applicationId}.provider"
因此,您的最终声明将是:
Uri uri= FileProvider.getUriForFile(Editor.this,
getApplicationContext().getPackageName() + ".provider",
new File(Editor.this.getFilesDir(), filename));
在res/xml文件夹路径文件更改中:
如果清单中的权限参数为:
android:authorities="${applicationId}.provider"
在java代码中:
File file = new File(context.getFilesDir(), fileName);
Uri uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);
这是我的问题的一部分-我不知道路径是什么以及如何找到它文件在你的手机中的位置?我正在尝试访问我刚刚创建的文件(使用我发布的代码),我不知道应用程序将其保存在哪里。是否有方法指定创建文件的路径?我找不到这方面的说明,在查找如何在内部保存文件时,我只能找到仅包含文件名的示例。openFileOutput()将文件保存到应用程序的内部文件夹。要获取该文件的文件夹,应调用getFilesDir()。它应该类似于这个新文件(getFilesDir(),fileName);
File file = new File(context.getFilesDir(), fileName);
Uri uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);