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

标签 java android file uri

请原谅我问了一个可能很愚蠢的问题,但我真的无法在任何地方找到答案。

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

这是我的代码(Editor 是 Activity 的名称,myapp 是包的名称):

String filename = "Lorem ipsum.html";

            FileOutputStream outputStream;

            try {
                outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
                outputStream.write(Html.toHtml(textField.getText()).getBytes());
                outputStream.close();
                System.out.println(filename);
            } catch (Exception e) {
                e.printStackTrace();
            }

                Intent shareIntent = ShareCompat.IntentBuilder.from(Editor.this)
                        .setStream(FileProvider.getUriForFile(Editor.this, "com.myapp.fileprovider", new File(filename)))
                        .getIntent();
                shareIntent.setData(FileProvider.getUriForFile(Editor.this, "com.myapp.fileprovider", new File(filename)));
                shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            startActivity(shareIntent);

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

java.lang.IllegalArgumentException: Failed to find configured root that contains /Lorem ipsum.html

在尝试查找 URI 时,我显然做错了什么,但我一直无法找到解决方案。遵循官方文档没有帮助,我找不到这个特定问题的示例。

如果重要的话,这是我的文件提供者声明:

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

这是无效的。

您应该在File的构造函数中使用文件的完整路径作为参数。

正如@Fatih 所评论的,你应该使用

new File(getFilesDir(), filename)

作为第三个参数。

list 中的 authorities 参数也应更正为:

android:authorities="${applicationId}.provider" 

所以你的最终陈述将是:

Uri uri= FileProvider.getUriForFile(Editor.this,
        getApplicationContext().getPackageName() + ".provider",
        new File(Editor.this.getFilesDir(), filename));

关于java - 从我刚刚创建的文件中获取 Uri (android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46691567/

相关文章:

php - 如何将 DOMPDF 生成的内容保存到文件中?

java - 哈夫曼压缩文件(得到树但无法压缩)- Java

java - 开始 Activity 未开始

java - 我应该使用哪个框架(Grails、Java/Spring)?

java - 类似于java中的fork()函数

android - 没有 Xamarin debug.keystore

android - 一些奇怪的安卓错误

Java:何时使用线程池的指南?

android - 带有文本和图标的微调器

python - OpenAI, Python, 删除文件