我对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框图:

发布于 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和更高版本开始,为了安全目的,需要进行一些策略更改。这就是为什么添加这个额外代码的原因。上面的块映像已经用以下代码进行了更新:
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());虽然建议使用android.support.v4.content.FileProvider来解决这类问题,但是对于Sketchware平台上的支持较少,此时最好使用上述方法。
您可以阅读这,以获得更多关于上述修正的说明。
发布于 2020-06-02 04:45:50
也许这能帮你做这份工作。
下面是创建包含多个附件的emailIntent所需的代码。关键的更改是ACTION_SEND_MULTIPLE。
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的所有信息是,一次只能附加一个文件,请看这里。
https://stackoverflow.com/questions/62071046
复制相似问题