安卓将文件附加到 GMAIL - 无法附加空文件



我有一个程序,它总是将相同的文件附加到GMAIL(撰写>附加文件>打开从> "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();

这个在Android 6.0之前工作得很好。现在,当尝试使用它时,我收到以下错误:

不能附加空文件

Astro File Sharing给我同样的错误(可能是旧版本)。

然而,我安装了ES文件资源管理器,当我执行相同的例程并选择文件时,我收到一个对话框,上面写着:

拾取文件

  • 正常Android方式(用于MMS,Gmail,…)
  • 文件方式(如果上述失败,请尝试此方法)

"File Way"会像我的程序一样失败。"正常的Android方式"可以正常工作。

有没有人知道它是做什么的,我可以复制一下?

提前感谢!

OBS:已经尝试了很多次putExtra(STREAM, path),但是没有成功。

好了,经过大量的研究和拦截一些意图,现在让它工作了。

我要做的就是把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。

参见以下问题:

android-6-cannot-share-files-anymore

这个行为是Android 6.0和Gmail。请看下面的帖子

Issue 3141 - android-developer-preview

如果你去设置->应用程序->Gmail->权限和启用"Storage"权限,则共享工作。

在这种情况下,Gmail应该请求"存储"权限
其他电子邮件应用程序应该正确处理附件。

修复方法如下:

进入设置->应用程序-> Gmail ->权限打开"存储"权限这个变通办法解决了我的问题。

我找不到一个明确的答案(在gmail上发送没有SD卡的附件),我试图复制到另一个文件名,但没有雪茄。我让它工作的方法是复制到Downloads文件夹,然后从那里开始。

获取下载路径 Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS)

拉完整路径下载文件夹复制附件到那里,我们就好了。超过20M的文件不能进入

在指定的文件路径下使用INTENT共享任何文件

    //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);

只需将authoritiesgetUriForFile方法参数中的manifest匹配即可。

在清单

 <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="com.example.myapp.fileprovider"
        android:grantUriPermissions="true"
        android:exported="false">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filepaths" />
    </provider>

相关内容

  • 没有找到相关文章

最新更新