首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改Java代码以发送多个电子邮件附件,使用Sketchware?

如何修改Java代码以发送多个电子邮件附件,使用Sketchware?
EN

Stack Overflow用户
提问于 2020-05-28 17:38:53
回答 2查看 824关注 0票数 4

我对Java非常陌生,我已经在Sketchware上构建了一个应用程序。如果您不熟悉它,它使用块编程,您可以将自己的代码注入自定义块中。

由于所有应用程序视图的存储都是本地的,我需要所有的输出PDF被附加到一个按钮的电子邮件上。

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

代码语言:javascript
复制
emailIntent.putExtra(
    Intent.EXTRA_STREAM,
    Uri.fromFile(
        new java.io.File(Environment.getExternalStorageDirectory() +"/Documents/filename.pdf")
    )
);

我拥有的文件名位于一个文件夹中,名为filename1.pdffilename2.pdf等。

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

下面是Sketchware框图:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-07 16:12:52

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

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

您已经使用这个元素添加了一些自定义代码。所以,为了解决你的问题,这个问题会是这样的:

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

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

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

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

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

编辑:

从Android7.0和更高版本开始,为了安全目的,需要进行一些策略更改。这就是为什么添加这个额外代码的原因。上面的块映像已经用以下代码进行了更新:

代码语言:javascript
复制
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());

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

您可以阅读,以获得更多关于上述修正的说明。

票数 3
EN

Stack Overflow用户

发布于 2020-06-02 04:45:50

也许这能帮你做这份工作。

下面是创建包含多个附件的emailIntent所需的代码。关键的更改是ACTION_SEND_MULTIPLE

代码语言:javascript
复制
public static void email(Context context, String emailTo, String emailCC,
    String subject, String emailText, List<String> filePaths)
{
    //need to "send multiple" to get more than one attachment
    final Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
    emailIntent.setType("text/plain");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, 
        new String[]{emailTo});
    emailIntent.putExtra(android.content.Intent.EXTRA_CC, 
        new String[]{emailCC});
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    emailIntent.putExtra(Intent.EXTRA_TEXT, emailText);
    //has to be an ArrayList
    ArrayList<Uri> uris = new ArrayList<Uri>();
    //convert from paths to Android friendly Parcelable Uri's
    for (String file : filePaths)
    {
        File fileIn = new File(file);
        Uri u = Uri.fromFile(fileIn);
        uris.add(u);
    }
    emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
    context.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
}

更新

在聊天室进行讨论后,我想得出结论,用Sketchware在电子邮件中发送多个附件是不可能的,因为它不提供Intent.ACTION_SEND_MULTIPLE功能。你需要一个一个地发送多封带有附件的电子邮件。

上面提到的代码将满足您需要的工作时,您可以自由编码,这将与安卓如前所述工作。

我所能读到的关于Sketchware的所有信息是,一次只能附加一个文件,请看这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62071046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档