【问题标题】:Google drive changes file name to Intent.EXTRA_SUBJECT when sharing a file via Intent.ACTION_SEND通过 Intent.ACTION_SEND 共享文件时,Google 云端硬盘将文件名更改为 Intent.EXTRA_SUBJECT
【发布时间】:2016-02-13 16:42:12
【问题描述】:

我有以下代码通过 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"));     
}

【问题讨论】:

  • 您能否说明在选择 Google Drive 时如何处理传入意图?
  • 最后一行显示了android选择器。然后我选择 Google Drive。之后显示 Google Drive 应用程序并从不是我的 Google Drive 应用程序继续上传。在这一步,会显示一个标题为“保存到驱动器”的对话框,我只需在 Google Drive 上选择一个文件夹,然后按“保存”按钮。文件已成功上传到驱动器。当我使用 Google Drive 应用程序将文件下载到我的 SDCard 时,文件名是“Backup”而不是“001.mks”。
  • 我的意思是关于如何处理意图的代码,因为错误可能位于那里。
  • 我也遇到了同样的问题。 Google Drive 采用“主题”并将其用作文件名,因此如果您不想将文件名放在主题中,那您就完蛋了。

标签: android android-intent google-drive-android-api


【解决方案1】:

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

请注意,在向 Intent 提供文件 Uri 时,您必须使用 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"));     
}

【讨论】:

  • 发挥了魅力!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多