Intent.ACTION_PICK的行为有所不同

时间:2016-02-19 15:50:32

标签: android android-gallery

我使用以下代码从图库中选择图像。当我用三星Galaxy S4进行测试时,它直接进入了我想要的画廊。

但是,当我在LG Optimus II设备上测试我的代码时,它会显示一个对话框,提供选择图库或图片的选项。换句话说,它增加了一个我不想要的层。

两款设备均配备KitKat 4.4.2操作系统。

public static void showFileChooser(Activity activity) {
  Intent intent = new Intent();
  intent.setType("image/*");
  intent.setAction(Intent.ACTION_PICK);
  activity.startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1);
}

2 个答案:

答案 0 :(得分:4)

  

当我在LG Optimus II设备上测试我的代码时,会显示一个对话框,提供选择图库或图片的选项

这是因为该设备上有两个活动支持ACTION_PICKimage/*个文件。根据设备上的应用程序,可以有0到N个这样的活动。这将包括用户自行安装的预安装应用和应用。这些包括从本地文件管理器到一般云提供商(例如Dropbox)到图像特定应用程序(例如Instagram)。

  

换句话说,它增加了一个我不想要的层。

然后不要使用ACTION_PICK。您正在委托第三方应用程序;这取决于用户,而不是您,用户希望使用的第三方应用程序。

答案 1 :(得分:3)

如果你想要画廊那么

    Intent pickImageIntent = new Intent(Intent.ACTION_PICK, 
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

请用于api 19或以上

if (Build.VERSION.SDK_INT < 19) {
                        Intent intent = new Intent();
                        intent.setType("image/jpeg");
                        intent.setAction(Intent.ACTION_GET_CONTENT);

                        startActivityForResult(Intent.createChooser(intent,
                                "Select image to promote"),
                                GALLERY_INTENT_CALLED);

                    } else {
                        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                        intent.addCategory(Intent.CATEGORY_OPENABLE);
                        intent.setType("image/jpeg");
                        startActivityForResult(intent,
                                GALLERY_KITKAT_INTENT_CALLED);
                    }