从内部存储发送带附件的电子邮件

Sna*_*ake 6 android

我按照android docs的建议在内部存储上创建文件.准确地说,文件是在内部存储中的特定目录下创建的.我使用模式world_readable模式执行此操作.然后我尝试使用电子邮件程序附加文件.我能够连接文件,但发送电子邮件失败(似乎不是加载文件)我相信它是内部存储/许可的东西.

任何人都知道如何解决它或一个工作的例子?将外部存储上的所有东西都转换成是很糟糕的.

谢谢

Ps:我检查了其他线程,他们似乎没有解决方案(旧线程)

Dee*_*moe 11

通过授予临时权限以将该文件作为共享意图的一部分进行读取,可以将应用程序本地存储中的文件共享到另一个应用程序(例如电子邮件附件).

第1步:将文件提供程序添加到AndroidManifest.xml:

<applicaton>
     ....
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.your.package.name.fileprovider"
        android:grantUriPermissions="true"
        android:exported="false">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filepaths" />
    </provider>
</application>
Run Code Online (Sandbox Code Playgroud)

步骤2:使用您要共享的本地应用程序存储中的文件路径添加文件res/xml/filepaths.xml:

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="myFolder" path="Folder/"/>
</paths>
Run Code Online (Sandbox Code Playgroud)

第3步:在您的java代码中创建文件共享意图:

    Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Your subject");
    shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Your message");

    ArrayList<Uri> uris = new ArrayList<Uri>();
    String shareName = new String(pathToFile + filename);
    File shareFile = new File(shareName);
    Uri contentUri = FileProvider.getUriForFile(context, "com.your.package.name.fileprovider", shareFile);
    uris.add(contentUri);
    shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

    // Grant temporary read permission to the content URI
    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

    String msgStr = "Share...";
    startActivity(Intent.createChooser(shareIntent, msgStr));
Run Code Online (Sandbox Code Playgroud)

如果您有任何问题,请参阅https://developer.android.com/training/secure-file-sharing/share-file.html中的文档 以获取更多详细信息.


KOT*_*IOS 4

我假设您正在尝试使用意图将文件作为电子邮件附件发送。

文件为空的原因是,由于 Android 安全模型,电子邮件应用程序无法访问 /data/data/package_name/myfile_name 中的文件(/data/data/package_name 目录是您的应用程序私有的)。

为了将文件添加为附件,您需要将其写入公共存储(例如 SD 卡),以便电子邮件应用程序可以访问它。