通过Android Intent附加多个文件,可处理一个文件,但不能处理多个文件

k4ymrczo  于 2022-11-03  发布在  Android
关注(0)|答案(2)|浏览(108)

如果我使用一个简单的:

intent.putExtra(Intent.EXTRA_STREAM, detailsuri);

...那么它就可以工作。但是如果我尝试使用

intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

......那么它就不会附加任何东西。我可以一次附加一个文件,这样就可以成功地附加每个文件。所以这两个文件都没有问题。下面是创建文件、获取URI并构建Intent的完整代码。
我遗漏了什么?为什么我不能附加多个文件?

File outputDir = controller.getDocumentStorageDir();

String jsontext = buildDbText();

File dbfile = new File(outputDir, "db.json");
FileWriter writer = new FileWriter(dbfile);
writer.write(jsontext);
writer.close();

Uri jsondburi = Uri.fromFile(dbfile);

String appdetails = buildDetailsText();

File detailsfile = new File(outputDir, "details.txt");
FileWriter writer = new FileWriter(detailsfile);
writer.write(appdetails);
writer.close();

Uri detailsuri = Uri.fromFile(detailsfile);

Intent intent = new Intent(Intent.ACTION_SENDTO);

intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { custsupportEmail });
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, emailbody);

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

ArrayList<Uri> uris = new ArrayList<>();
uris.add(detailsuri);
uris.add(jsondburi);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

startActivity(intent);
sh7euo9m

sh7euo9m1#

Intent intentShareFile = new Intent(Intent.ACTION_SEND_MULTIPLE);
        Uri uri =  FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", file);
        Uri uri2 =  FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", file2);
        intentShareFile.setType("text/*");

        ArrayList<Uri> uris = new ArrayList<>();
        uris.add(uri);
        uris.add(uri2);

        intentShareFile.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
        intentShareFile.putExtra(Intent.EXTRA_SUBJECT, file.getName());
        intentShareFile.putExtra(Intent.EXTRA_TEXT, "Share " + file.getName() + file2.getName());
        context.startActivity(Intent.createChooser(intentShareFile, "Share " + file.getName() + file2.getName()));
lymgl2op

lymgl2op2#

W/Bundle:关键字android.intent.extra.STREAM应为Parcelable,但值为java. util. ArrayList。已返回默认值。

相关问题