我有以下代码通过Intent.ACTION_SEND共享文件。最后一行显示选择器,以便用户可以选择适当的应用程序。当我选择电子邮件时,一切都很好,文件附在电子邮件中。另一方面,当我选择谷歌驱动器时,文件上传到谷歌驱动器,但文件的名称更改为"备份"这是主题。也就是说,如果我拨打shareBackup("/sdcard/001.mks")
,那么Google驱动器上的文件名就是"备份"不是" 001.mks"。我的代码有什么问题吗?
public void shareBackup(String path) {
String to = "YourEmail@somewhere.com";
String subject = "Backup";
String message = "Your backup is attached";
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
email.putExtra(Intent.EXTRA_SUBJECT, subject);
email.putExtra(Intent.EXTRA_TEXT, message);
File f = new File(path);
email.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f));
email.setType("text/*");
startActivity(Intent.createChooser(email, "Send"));
}
答案 0 :(得分:3)
我也遇到了这个问题,我发现一个解决方法是使用操作Intent.ACTION_SEND_MULTIPLE
而不是Intent.ACTION_SEND
来共享文件。在这种情况下,共享文件在与google驱动器共享时会保留其名称(注意:我不知道为什么会出现此问题,或者这个'修复'是否会在时间推移时继续工作。在搜索此问题的解决方案时只遇到这个未经回答的SO帖子,没有找到任何现有的错误报告,也没有花时间自己提交一个。所以希望这篇文章有所帮助。
请注意,在将文件Uris提供给意图时,您必须使用Intent.putParcelableArrayListExtra
而不是Intent.putExtra
,并将单个Uri包装在ArrayList中。
通过这些更改,您的上述代码应如下所示:
public void shareBackup(String path) {
String to = "YourEmail@somewhere.com";
String subject = "Backup";
String message = "Your backup is attached";
Intent email = new Intent(Intent.ACTION_SEND_MULTIPLE);
email.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
email.putExtra(Intent.EXTRA_SUBJECT, subject);
email.putExtra(Intent.EXTRA_TEXT, message);
File f = new File(path);
email.putParcelableArrayListExtra(Intent.EXTRA_STREAM, new ArrayList<>(Arrays.asList(Uri.fromFile(f))));
email.setType("text/*");
startActivity(Intent.createChooser(email, "Send"));
}