Android:Intent.EXTRA_ALLOW_MULTIPLE 只允许单选

Posted

技术标签:

【中文标题】Android:Intent.EXTRA_ALLOW_MULTIPLE 只允许单选【英文标题】:Android: Intent.EXTRA_ALLOW_MULTIPLE allows only single picking 【发布时间】:2015-09-09 05:29:47 【问题描述】:

我想使用“Intent.EXTRA_ALLOW_MULTIPLE”意图过滤器从 android 库中打开多张图片:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) 
    final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
    startActivityForResult(Intent.createChooser(intent, "Add images"), SELECT_MULTIPLE_IMAGES);

但无论我使用什么应用程序(原生图库、QuickPic 应用程序),我都只能选择一张图片。测试设备运行的是 Android 5.1。

如何选择多张图片?

【问题讨论】:

EXTRA_ALLOW_MULTIPLE 是一个请求,而不是一个命令,就像任何 Intent 附加内容一样。不要求您开始的活动尊重他们。 您是否偶然知道一个图库应用,它支持使用EXTRA_ALLOW_MULTIPLE 参数进行多图像拾取? 不是我的头,对不起。 添加 EXTRA_ALLOW_MULTIPLE 对我有用,并允许我选择多个图像,但是我不知道如何在 onActivityResult 中获取 URL。 它需要长按...不知道为什么这是默认行为 【参考方案1】:

这目前正在我最近的一个实时应用程序中工作,该应用程序涵盖了使用 4.4 及更高版本的 Gallary 以及使用编写自己的自定义图库来选择图像。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 
    try 
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_IMAGE_REQUEST_GALLERY);
    catch(Exception e)
        Intent photoPickerIntent = new Intent(this, XYZ.class);
        startActivityForResult(photoPickerIntent, SELECT_IMAGE_REQUEST);
    
 else 
    Intent photoPickerIntent = new Intent(this, XYZ.class);
    startActivityForResult(photoPickerIntent, SELECT_IMAGE_REQUEST);

【讨论】:

您(例如)使用什么应用程序来挑选图像?我尝试过 QuickPic 和 Samsung Gallery 应用程序,但似乎都只支持单次选择。你的代码和我的很相似。 我已经在 Moto G 和 Nexus 4、Nexus 5 和 Nexus 6 设备上进行了上述测试。 使用系统图库应用? YES 使用 System Gallery 应用程序最近发布了这个应用程序。play.google.com/store/apps/… 需要长按才能激活多选模式【参考方案2】:
/**
 * Extra used to indicate that an intent can allow the user to select and
 * return multiple items. This is a boolean extra; the default is false. If
 * true, an implementation is allowed to present the user with a UI where
 * they can pick multiple items that are all returned to the caller. When
 * this happens, they should be returned as the @link #getClipData() part
 * of the result Intent.
 *
 * @see #ACTION_GET_CONTENT
 * @see #ACTION_OPEN_DOCUMENT
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) 
        if (data.getData() != null) 
            try 
                files.clear();
                Uri uri = data.getData();
                String url = FileUtils2.getPath(this, uri);
                assert url != null;
                File file = new File(url);
                files.add(file);
                mPresenter.postAnnexData(files);
             catch (Exception e) 
                e.printStackTrace();
            
         else 
            //If uploaded with the new Android Photos gallery
            ClipData clipData = data.getClipData();
            files.clear();
            if (clipData != null) 
                for (int i = 0; i < clipData.getItemCount(); i++) 
                    ClipData.Item item = clipData.getItemAt(i);
                    Uri uri = item.getUri();
                    String url = FileUtils2.getPath(this, uri);
                    assert url != null;
                    File file = new File(url);
                    files.add(file);
                
            
            mPresenter.postAnnexData(files);
        
    

【讨论】:

当我选择 2 或 3 张图片时,我只能阅读第一张,因为 data.getData 始终不为空【参考方案3】:

本机库中没有多选,但您可以使用这个库来做到这一点: https://github.com/luminousman/MultipleImagePick

【讨论】:

感谢您的链接。还有很多其他的定制解决方案。但我想使用EXTRA_ALLOW_MULTIPLE 2019年还是这样吗?【参考方案4】:

而不是

startActivityForResult(Intent.createChooser(intent, "Add images"), SELECT_MULTIPLE_IMAGES);

试试

startActivityForResult(intent, SELECT_MULTIPLE_IMAGES); (Deprecated)

或者

someActivityResultLauncher.launch(intent);

避免使用

Intent.createChooser

【讨论】:

以上是关于Android:Intent.EXTRA_ALLOW_MULTIPLE 只允许单选的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录