我正在编写一个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();
}
答案 0 :(得分:1)
这是有效但附件,称为“peroneal.pdf”
不,它不叫“peroneal.pdf”,至少不在设备上。
您的本地文件系统上可能有一个名为peroneal.pdf
的文件。当你将它打包为资源时,这很大程度上已经失去了,就像你显然那样。
其他流程会看到android.resource://.../2131034113
,其中2131034113
是R.raw.peroneal
的十进制值(...
是您应用的包名称。)
如何更改它以使收到的文件具有原始名称?
好吧,你会通过使用Uri
实际拥有peroneal.pdf
来增加你的赔率。例如,您可以将原始资源复制到外部存储,然后使用基于File
的{{1}}代替。或者,通过基于Uri
的{{1}}提供附件,您可以在其中支持以openFile()
结尾的ContentProvider
。
但是,请记住,您要求其他应用代表您发送电子邮件。如何创建和打包这些电子邮件取决于其他电子邮件应用程序的作者。根本不保证您的附件将根据Uri
的最后一段进行命名。 可能有许多电子邮件应用程序将采用这种方法,但如果有一些不会这样做,我不会感到有点惊讶。