我已经尝试了几个小时了,所以我希望有人能指出我做错了什么。基本上我从数据库中提取一个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异常。
提前致谢。