写入文件然后打开后继续获取FileNotFound异常

时间:2018-01-26 00:02:46

标签: android android-file vcard android-fileprovider

我已经尝试了几个小时了,所以我希望有人能指出我做错了什么。基本上我从数据库中提取一个vCard字符串并将其传递给一个应该在用户手机上打开vCard的方法。我决定使用FileProvider类,因为我需要与用户的Contacts应用程序共享该文件,以便vCard可以存储在他们的手机中,因为我想在完成后删除该文件。

这是我的实施:

private void downloadVCard(final String vCardString, Context context) {
    try {
        File vcardPath = new File(context.getFilesDir(), "vcards");
        File vcardFile = new File(vcardPath, "vcard.vcf");
        FileOutputStream outputStream = new FileOutputStream(vcardFile);
        outputStream.write(vCardString.getBytes());
        outputStream.close();
        Uri contentUri = getUriForFile(context, "com.goartech.goar.fileprovider", vcardFile);

        // Let another application open the vcard
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(contentUri, "text/x-vcard");
        startActivity(intent);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我的FileProvider设置如下:

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.goartech.goar.fileprovider"
    android:grantUriPermissions="true"
    android:exported="false">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
</provider>

我的filepaths.xml看起来像:

<paths>
    <files-path path="vcards/" name="vcards" />
</paths>

我让它在某个点工作,其中联系人应用程序试图打开vCard文件(虽然没有选择器出现),但几秒后应用程序就会崩溃。我想也许是vCard结构,所以我做了一个非常简单的测试,但仍然没有。然后我想也许是因为它试图打开错误的文件并重组了一些东西,但现在我又得到了FileNotFound异常。

提前致谢。

0 个答案:

没有答案