我的应用将数据写入文本文件(在SD卡和内部存储器上)。 稍后,该应用程序会将文本文件通过电子邮件发送给人员列表。 我无法让gmail附加从内部应用程序文件区域提取的文件。 “原生Android邮件”可以从内部或SD卡区域附加文件,没有任何问题。如果文件来自SD卡,则Gmail会附加文件,但如果文件位于内部存储中,则不会附加文件。
//这会从SD发送文件 - 适用于android mail和gmail
Intent jj=new Intent(android.content.Intent.ACTION_SEND);
String fileName = "file://" + Environment.getExternalStorageDirectory()+"/aFolder/externalfile.txt"
jj.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileName));
jj.setType("text/plain");
Intent chooser = Intent.createChooser(jj , "Select Sender");
startActivity(chooser);
//这会发送一个内部文件 - 用于安卓邮件,但没有附件发送到gmail
Intent jj=new Intent(android.content.Intent.ACTION_SEND);
String fileName = "file://" + getFilesDir().toString() + "/internalfile.txt";
jj.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileName));
jj.setType("text/plain");
Intent chooser = Intent.createChooser(jj , "Select Sender");
startActivity(chooser);
有什么建议吗? 我是否需要以某种方式授予Gmail特殊权限? 我的附件都是文本文件 - 由应用程序编写 内部文件是使用openFileOutput(myFile,32769)
创建的由于 约翰D
答案 0 :(得分:2)
我找到的唯一方法是制作我自己的内容提供商,并将uri作为附件传递给我的内容提供商。
答案 1 :(得分:1)
与Dhego一样,我使用了内容提供商。特别是,一个FileProvider。
https://developer.android.com/reference/android/support/v4/content/FileProvider.html
使用此选项只需要修改Manifest并创建其他资源文件。此外,您需要通过FileProvider提供的静态方法获取格式有效的URI。
在你的Manfiest:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.authority.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
“com.example.authority.fileprovider”是您附加了“fileprovider”的应用程序权限。
在res / xml文件夹中,创建一个file_paths.xml文件,其中包含要公开的文件的路径。在我的例子中,我将它们从应用程序缓存目录中公开,所以我的XML看起来像:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path name="reports" path="reports/"/>
</paths>
就我而言,“reports”是我正在编写文件的应用程序缓存目录中的文件夹。
最后要做的是在你的代码中:
以下是一些示例代码:
emailIntent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(getActivity(), "com.example.authority.fileprovider", fileToAttach));
在你的Intent上调用startActivity,应该是它!
答案 2 :(得分:0)
似乎确实an issue with gmail。然而不幸的是,在撰写本文时,它似乎尚未修复。