android – 通过Intent.ACTION_SEND共享文件时,Google驱动器将文件名更改为Intent.EXTRA_SUBJECT

我有以下代码通过Intent.ACTION_SEND共享文件.最后一行显示选择器,以便用户可以选择适当的应用程序.当我选择电子邮件时,一切都很好,文件附在电子邮件中.另一方面,当我选择谷歌驱动器时,文件上传到谷歌驱动器,但文件名称更改为“备份”这是主题.也就是说,如果我调用shareBackup(“/ sdcard / 001.mks”),那么Google驱动器上的文件名是“Backup”而不是“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"));     
}
最佳答案
我也遇到了这个问题,我发现一个解决方法是使用操作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,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"));     
}

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...