首页 > 解决方案 > 如何使用 Sketchware 修改 Java 代码以发送多个电子邮件附件?

问题描述

我真的是 Java 新手,并且一直在 Sketchware 上构建应用程序。如果您不熟悉它,它使用块编程,您可以在自定义块中注入自己的代码。

由于所有应用程序视图的存储都是本地的,因此我需要在按下按钮时将所有输出 PDF 附加到电子邮件中。

下面的代码可以附加一个文件,但需要附加 6 个文件。所有都是从 android 设备上的 /Documents/ 文件夹调用的。我怎样才能做到这一点?

emailIntent.putExtra(
    Intent.EXTRA_STREAM,
    Uri.fromFile(
        new java.io.File(Environment.getExternalStorageDirectory() +"/Documents/filename.pdf")
    )
);

我拥有的文件名在一个文件夹中,名为filename1.pdf,filename2.pdf等。

如果我尝试对每个文件名重复此代码,filename6.pdf将是电子邮件中唯一附加的文件。

这是 Sketchware 的框图:

在此处输入图像描述

标签: javaandroidsketchware

解决方案


首先,正如其他答案所暗示的那样,目前Intent.ACTION_SEND_MULTIPLE是发送多个文件的方式。

但是,在 Sketchware 的内置块中没有功能并不是应用程序的确切限制,因为它提供了以下块,它能够以 android 的方式做任何你想做的事情。

在此处输入图像描述

您已经使用此元素添加了一些自定义代码。因此,为了解决您的问题,该块将如下所示:

在此处输入图像描述

以下是我添加的一些自定义代码块的详细信息:

mail.setAction(Intent.ACTION_SEND_MULTIPLE):此自定义代码已通过删除默认Intent > setAction块添加。动作名称说明了一切,这允许通过意图发送多个文件。

ArrayList<Uri> uris = new ArrayList<Uri>():这声明了一个新的ArrayList来存储要通过意图发送的所有 Uri 的列表。

uris.add(Uri.fromFile(new java.io.File(Environment.getExternalStorageDirectory() + "/Documents/filename1.pdf"))):此行将提供的 uri 添加到名为uris的ArrayList中。只要您想将多个文件 uri 添加到列表中,就可以多次调用此块。

mail.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris):会将 uris绑定到意图的EXTRA_STREAM

编辑:

从 Android 7.0 及更高版本开始,出于安全目的,有一些策略更改。这就是添加此额外代码的原因。上面的块图像已经使用此代码更新:

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());

虽然建议使用android.support.v4.content.FileProvider来解决此类问题,但由于 Sketchware 平台支持较少,此时最好使用上述方法。

您可以阅读内容以进一步了解上述修复。


推荐阅读