Java 从我刚刚创建的文件中获取Uri(android)

Java 从我刚刚创建的文件中获取Uri(android),java,android,file,uri,Java,Android,File,Uri,请原谅我问了一个可能很愚蠢的问题,但我真的到处都找不到答案 我需要我的程序将EditText的内容保存为html文件,并与其他应用程序共享。为此,我需要将文件写入内部存储器,然后获取URI。然而,没有任何关于如何做到这一点的信息(我可以很好地理解) 这是我的代码(编辑器是活动的名称,myapp是包的名称): 据我所知,文件创建部分工作得很好;没有发现任何例外。但是,实际共享部分会因以下错误而崩溃: java.lang.IllegalArgumentException: Failed to fin

请原谅我问了一个可能很愚蠢的问题,但我真的到处都找不到答案

我需要我的程序将EditText的内容保存为html文件,并与其他应用程序共享。为此,我需要将文件写入内部存储器,然后获取URI。然而,没有任何关于如何做到这一点的信息(我可以很好地理解)

这是我的代码(编辑器是活动的名称,myapp是包的名称):

据我所知,文件创建部分工作得很好;没有发现任何例外。但是,实际共享部分会因以下错误而崩溃:

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);