繁体   English   中英

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

[英]Get Uri from file I just created (android)

原谅我可能是一个愚蠢的问题,但我真的找不到任何答案。

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

这是我的代码(编辑器是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时显然做错了,但我一直无法找到解决方案。 官方文档后没有帮助,我找不到这个具体问题的例子。

如果重要,这是我的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"");

这是无效的。

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

正如@Fatih评论你应该使用

new File(getFilesDir(), filename)

作为第三个参数。

此外,清单中的authorities参数应更正为:

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

所以你的最终陈述将是:

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

在res / xml文件夹路径文件中更改:

<?xml version="1.0" encoding="utf-8"?> <paths> <files-path name="files" path="." /> </paths><!-- NOT THIS: <external-path name="external_files" path="."/>-->

如果清单中的权限参数是:

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

并在java代码中:

File file = new File(context.getFilesDir(), fileName);
Uri uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM