应用程序发送的电子邮件附件与发送的文件名称不同

时间:2012-11-08 22:13:54

标签: android email attachment

我正在编写一个Android应用程序,其功能将发送带有特定文档附件的电子邮件。这是有效但附件,当我将其附加到电子邮件时称为“peroneal.pdf”(作为意图,我确定是问题所在)在收到电子邮件时变为“2131034113.pdf” 。如何更改它以使收到的文档具有原始名称?是否与命名意图有关?如果是这样,我该怎么做?在此先感谢您的帮助,我附上了代码段:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL  , new String[]{value.toString()});
i.putExtra(Intent.EXTRA_SUBJECT, "Tendon Email");
i.putExtra(Intent.EXTRA_TEXT   , "The info is attached, just hit send.");


String rawFolderPath = "android.resource://" + getPackageName() + "/" + R.raw.peroneal;

Uri emailUri = Uri.parse(rawFolderPath);
i.putExtra(Intent.EXTRA_STREAM, emailUri);
i.setType("application/pdf");


try {
     startActivity(Intent.createChooser(i, "Send mail..."));

} catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(PTSlideShow.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }

1 个答案:

答案 0 :(得分:1)

  

这是有效但附件,称为“peroneal.pdf”

不,它不叫“peroneal.pdf”,至少不在设备上。

您的本地文件系统上可能有一个名为peroneal.pdf的文件。当你将它打包为资源时,这很大程度上已经失去了,就像你显然那样。

其他流程会看到android.resource://.../2131034113,其中2131034113R.raw.peroneal的十进制值(...是您应用的包名称。)

  

如何更改它以使收到的文件具有原始名称?

好吧,你会通过使用Uri实际拥有peroneal.pdf来增加你的赔率。例如,您可以将原始资源复制到外部存储,然后使用基于File的{​​{1}}代替。或者,通过基于Uri的{​​{1}}提供附件,您可以在其中支持以openFile()结尾的ContentProvider

但是,请记住,您要求其他应用代表您发送电子邮件。如何创建和打包这些电子邮件取决于其他电子邮件应用程序的作者。根本不保证您的附件将根据Uri的最后一段进行命名。 可能许多电子邮件应用程序将采用这种方法,但如果有一些不会这样做,我不会感到有点惊讶。