Android - 无法从内部缓存共享vCard

时间:2013-12-04 05:48:46

标签: android caching file-sharing

我正在使用ShareActionProvider来共享我创建的vcf文件。

如果我将文件存储在外部缓存中,我绝对没有共享文件的问题,但如果我将其存储在内部缓存中,我尝试与vCard共享的每个应用程序都表示该文件已损坏或不受支持。 / p>

我在创建文件后读取文件,在两种情况下它们完全相同。

此代码有效:

File dir = new File(getExternalCacheDir() + "/contact");
dir.mkdirs();
vcfFile = new File(dir, name.replace(' ', '+') + ".vcf");

但是,如果我改用getCacheDir(),我就会遇到问题。

以下是创建文件的代码:

FileWriter fw;
    try {
        fw = new FileWriter(vcfFile);
        fw.write("BEGIN:VCARD\r\n");
        fw.write("VERSION:2.1\r\n");
        fw.write("N:" + codedName + "\r\n");
        fw.write("FN:" + name + "\r\n");
        fw.write("ORG:" + org + "\r\n");
        fw.write("TITLE:" + position + "\r\n");
        fw.write("TEL;PREF;WORK;VOICE;ENCODING=QUOTED-PRINTABLE:" + phone + "\r\n");
        fw.write("TEL;PREF;WORK;FAX;ENCODING=QUOTED-PRINTABLE:" + fax + "\r\n");
        fw.write("ADR;WORK;;ENCODING=QUOTED-PRINTABLE:" + codedAddr + "\r\n");
        fw.write("EMAIL;INTERNET:" + email + "\r\n");
        fw.write("URL;WORK:" + website + "\r\n");
        fw.write("PHOTO;TYPE=JPEG;ENCODING=BASE64:" + codedImage + "\r\n");
        fw.write("END:VCARD\r\n");
        fw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

这是ShareActionProvider的代码:

provider = (ShareActionProvider) menu.findItem(R.id.share).getActionProvider();

    if (provider != null) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.setType("text/vcard");
        intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(vcfFile));
        provider.setShareIntent(intent);
    }

我做错了什么想法?

1 个答案:

答案 0 :(得分:0)

  

关于我做错了什么的想法?

     

我尝试与vCard共享的每个应用都表示该文件已损坏或不受支持。

根据Using the Internal Storage

  

您可以将文件直接保存在设备的内部存储空间中。默认情况下,保存到内部存储的文件应用程序专用其他应用程序无法访问(用户也不能)...

因此,建议使用外部存储

清单

uses-permission android:name =" android.permission.WRITE_EXTERNAL_STORAGE"

代码

```

public void sharePublicContact(View view){

    String name = "Mickey Mouse";
    String org = "Disney Corp.";
    String note = "";

    File dir = new File(getExternalCacheDir() + "/contact");
    dir.mkdirs();
    File vcfFile = new File(dir, name.replace(' ', '+') + ".vcf");

    FileWriter fw;
    try {

        fw = new FileWriter(vcfFile);
        fw.write("BEGIN:VCARD\r\n");
        fw.write("VERSION:3.0\r\n");
        fw.write("FN:" + name + "\r\n");
        fw.write("ORG:" + org + "\r\n");
        fw.write("NOTE:" + note + "\r\n");
        fw.write("END:VCARD\r\n");
        fw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.setType("text/vcard");
    sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(vcfFile));

    startActivity(sendIntent);
}

```