当前位置: 首页 > 面试题库 >

如何通过意图共享多个文件?

潘秦斩
2023-03-14
问题内容

这是我的代码,但这是针对单个文件的解决方案

我可以像下面的单个文件一样共享多个文件和上载吗?

Button btn = (Button)findViewById(R.id.hello);

    btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_SEND);

                String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/pic.png";
                File file = new File(path);

                MimeTypeMap type = MimeTypeMap.getSingleton();
                intent.setType(type.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(path)));

                intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
                intent.putExtra(Intent.EXTRA_TEXT, "1111"); 
                startActivity(intent);
            }
        });

问题答案:

是的,但是您需要使用Intent.ACTION_SEND_MULTIPLE而不是Intent.ACTION_SEND

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.putExtra(Intent.EXTRA_SUBJECT, "Here are some files.");
intent.setType("image/jpeg"); /* This example is sharing jpeg images. */

ArrayList<Uri> files = new ArrayList<Uri>();

for(String path : filesToSend /* List of the files you want to send */) {
    File file = new File(path);
    Uri uri = Uri.fromFile(file);
    files.add(uri);
}

intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, files);
startActivity(intent);

这绝对可以简化,但我在其中保留了一些内容,以便您可以分解所需的每个步骤。

更新 :从API
24开始,共享文件URI将导致FileUriExposedException。为了解决这个问题,您可以将compileSdkVersion切换为23或更低版本,也可以将Content
URI与FileProvider一起使用

更新(更新) :Google最近宣布,将需要新的应用程序和应用程序更新,才能将最新版本的Android定位到Play商店。也就是说,如果您打算将应用发布到商店,则将API
23或更低版本定位不再是有效选项。您必须走FileProvider路线。



 类似资料:
  • 我使用这个代码,但它不能正常工作。 当我使用text类型时,它可以正常工作。 但是我想共享一个文本和一个图像。 而共享的意图在Facebook中不起作用。

  • 问题内容: 我的机器在端口8080上运行着jboss,我想在网络上共享jboss服务器,以便我使用jbossws- native-4.0.2运行jboss服务,但是我仍然无法访问网络上的jboss服务器,请帮助。 问题答案: 启动jboss(run.sh或run.bat)时使用选项-b 0.0.0.0,这会将端口绑定到所有网络接口。默认值为localhost,这就是为什么您无法通过网络访问服务器的

  • 我有一个h:form,它围绕着p:tabView。在选项卡中,每个输入元素都有一个p:message。 我发表了以下意见。 1) 问题:验证仅在已激活的选项卡中执行 > 如果我切换到编辑模式并且当前选项卡没有验证错误并且我没有更改选项卡,那么我的实体将被保存并且其他选项卡上的验证错误将被忽略。 如果我切换到编辑模式并导航到有验证错误的选项卡,然后导航到没有验证错误的第一个选项卡,则会显示验证错误(

  • 我需要在C和Rust应用程序之间共享内存。锈菌——生产者,消费者。 在C语言中,我会创建一个共享内存区域,并将其传递给Rust进行编写。 在C端,我使用了这样的东西: 在锈迹斑斑的一面,我该如何打开存储ID为的内存并对其进行写入?我猜这是一个很好的例子,但却找不到可靠的例子: https://docs.rs/libc/0.2.77/libc/fn.shm_open.html https://doc

  • 我有一个python项目,有很多其他项目。py文件,它从它的子文件夹和txt文件导入,以及我想分享这个项目,但只有作为一个可执行文件,这样没有人可以看到代码或文本文件等。。。如果没有,有什么方法可以这样做吗?我怎样才能在不让任何人检查项目代码的情况下共享项目。py文件

  • 问题内容: 我正在通过一个Intent传递一个int,但是我不知道如何接收它,因为我必须从OnCreate方法中接收一个intent,但是如果我将其放置在那里,则无法将其与其余代码中的另一个int进行比较:我在这里发送意图: 在这里,我收到它: 但是在onCreate方法之后,我必须这样做: 问题答案: 您需要获取在方法中传递的数据,而不是在声明中。 另外你不发送,正在发送中。所以,你需要得到从。