Gui*_*Deo 20 android attachment android-intent
我有一个程序,总是将相同的文件附加到GMAIL(Compose> Attach File> Open From>"MyProgram").它总是会选择相同的文件.
它做的是:
String path = Environment.getExternalStorageDirectory() + "/file.3gp";
File f = new File(path);
Uri data = Uri.fromFile(f);
Intent i = new Intent();
i.setData(data);
setResult(Activity.RESULT_OK, i);
finish();
Run Code Online (Sandbox Code Playgroud)
这个工作正常,直到Android 6.0.现在,我在尝试使用它时收到以下错误:
无法附加空文件
Astro文件共享给了我同样的错误(可以是旧版本).
但是,我安装了ES文件资源管理器,当我执行相同的例程并选择文件时,我收到一个Dialog,其中说:
拿起文件为
- 普通Android方式(适用于彩信,Gmail,...)
- 文件方式(如果失败,请尝试此操作)
"文件方式"将失败,因为我的程序."普通的Android方式"将正常工作.
有没有人知道它的作用,所以我可以复制?
提前致谢!
OBS:已经尝试了很多次putExtra(STREAM,路径),但没有成功.
Gui*_*Deo 18
好的,经过大量的研究和拦截一些意图后,现在就开始工作了.
我要做的是将file:///更改为content://.
我按照Android上的这些信息执行了此操作:https://developer.android.com/reference/android/support/v4/content/FileProvider.html
唯一的主要变化是我使用了/sdcard/file.ext的硬编码路径.还有,行
getUriForFile(getContext(), "com.mydomain.fileprovider", newFile);
Run Code Online (Sandbox Code Playgroud)
被改为
Uri contentUri = FileProvider.getUriForFile(this, "com.mydomain.fileprovider", newFile);
Run Code Online (Sandbox Code Playgroud)
还必须包括:
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
i.setData(contentUri);
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么我必须从文件更改为内容,但在此之后,文件现在再次附加!如果您遇到此问题,请参阅链接,不要忘记需要创建的新.xml.
mka*_*tek 15
请参阅以下问题:
此行为适用于Android 6.0和Gmail.请参阅以下主题.
问题3141 - android-developer-preview
如果您转到设置 - >应用程序 - > Gmail->权限并手动启用"存储"权限,则共享有效.
Gmail应该在此方案中要求"存储"权限,并且它将像在过去的所有Android版本中一样工作.
其他电子邮件应用程序应正确处理附件.
| 归档时间: |
|
| 查看次数: |
20513 次 |
| 最近记录: |