通过 Intent.ACTION_SEND 共享文件时,Google 云端硬盘将文件名更改为 Intent.EXTRA_SUBJECT

问题描述 投票:0回答:2

我有以下代码通过 Intent.ACTION_SEND 共享文件。最后一行显示一个选择器,以便用户可以选择合适的应用程序。当我选择电子邮件时,一切都很好,文件已附加到电子邮件中。另一方面,当我选择 Google Drive 时,文件会上传到 Google Drive,但文件名会更改为主题“backup”。也就是说,如果我调用

shareBackup("/sdcard/001.mks")
,那么 Google 驱动器上的文件名是“Backup”而不是“001.mks”。我的代码有问题吗?

public void shareBackup(String path) {  
    String to = "[email protected]";
    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"));     
}
android android-intent google-drive-android-api
2个回答
6
投票

我也遇到了这个问题,我发现的一种解决方法是使用操作

Intent.ACTION_SEND_MULTIPLE
而不是
Intent.ACTION_SEND
来共享文件。 在这种情况下,共享文件在与谷歌驱动器共享时保留其名称(注意:我不明白为什么会存在此问题,或者随着时间的推移此“修复”是否会继续起作用。在搜索此问题的解决方案时,我只遇到了这篇未答复的 SO 帖子,没有找到任何现有的错误报告,也没有花时间自己提交一份,所以希望这篇文章能有所帮助)。

请注意,在向意图提供文件 Uris 时,您必须使用

Intent.putParcelableArrayListExtra
而不是
Intent.putExtra
,并将单个 Uri 包装在 ArrayList 中。

进行这些更改后,您的上述代码应如下所示:

public void shareBackup(String path) {  
    String to = "[email protected]";
    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"));     
}

0
投票

对我来说,将 EXTRA_SUBJECT 中的“主题”更改为实际文件名就足够了,并且它有效,不需要多个解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.