我有一个程序会始终将相同的文件附加到GMAIL(撰写>附加文件>打开>“MyProgram”)。它总是会选择相同的文件。
它在做什么:
public static bool IsDayWhatYouWant()
{
var now = DateTime.UtcNow;
return IsFirstThreeDays(now) && IsWeekday(now) && !IsHoliday(now);
}
这在Android 6.0之前运行良好。 现在,我在尝试使用它时收到以下错误:
无法附加空文件
Astro文件共享给了我同样的错误(可以是旧版本)。
但是,我安装了ES文件资源管理器,当我执行相同的例程并选择文件时,我收到一个对话框,上面写着:
将文件选为
- 普通Android方式(适用于彩信,Gmail,...)
- 文件方式(如果失败,请尝试此操作)
“文件方式”会因我的程序而失败。 “普通Android方式”可以正常使用。
有没有人知道它的作用,所以我可以复制?
提前致谢!
OBS:已经尝试了很多次putExtra(STREAM,路径),但没有成功。
答案 0 :(得分:17)
好的,经过大量研究和拦截一些意图后,现在就开始工作了。
我必须做的是将file:///更改为content://。
我是根据Android的这些信息执行此操作的:https://developer.android.com/reference/android/support/v4/content/FileProvider.html
唯一的主要变化是我使用了/sdcard/file.ext的硬编码路径。 这一行
getUriForFile(getContext(), "com.mydomain.fileprovider", newFile);
已更改为
Uri contentUri = FileProvider.getUriForFile(this, "com.mydomain.fileprovider", newFile);
还必须包括:
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
i.setData(contentUri);
我真的不明白为什么我必须将从文件更改为内容,但在此之后,该文件现在又被重新附加了!如果您遇到此问题,请查看链接,并且不要忘记需要创建的新.xml。
答案 1 :(得分:15)
请参阅以下问题:
android-6-cannot-share-files-anymore
此行为适用于Android 6.0和Gmail。请参阅以下主题。
Issue 3141 - android-developer-preview
如果您转到设置 - >应用 - > Gmail->权限并启用 "存储"手动权限,然后共享工作。
Gmail应该要求"存储"在这种情况下的权限和它 可以像以前版本的Android一样工作。
其他电子邮件应用应正确处理附件。
答案 2 :(得分:2)
以下是如何修复它。
转到设置 - >应用 - > Gmail - >权限 打开“存储”权限 这种解决方法为我解决了这个问题。
答案 3 :(得分:0)
我找不到一个明确的答案(在没有SD卡的情况下在gmail上发送附件)我试图复制到另一个文件名但没有雪茄。我让它工作的方式是复制到Downloads文件夹并从那里开始。
使用此获取下载路径 的 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)强>
将完整路径拉到downlaods文件夹复制attachemnt到那里,我们很好。超过20M的文件不会出现
答案 4 :(得分:0)
使用提供给定文件路径的INTENT共享任何文件
<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" />
只需将 //File file= shareable File Path
Uri uri = FileProvider.getUriForFile(this, "com.example.myapp.fileprovider", file);
//FileProvider authorities from Manifest
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("*/*");
sharingIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
sharingIntent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(sharingIntent);
中的authorities
与方法manifest
的参数匹配。
在清单中
getUriForFile