Android如何使用一个Intent同时从相机或图库中选择图像

时间:2019-04-13 00:16:59

标签: android android-intent gallery

这是我在名为Pawoo的应用中找到的实现。我可以同时选择拍照或从系统内置画廊或第三方画廊中选择图像。

我想知道如何仅凭一个Intent来实现它。因为它似乎不是由第三方库实现的。

enter image description here

2 个答案:

答案 0 :(得分:0)

这不是一个Intent。此对话框是bottom sheet

答案 1 :(得分:0)

我已经知道如何实现它。受Intent to choose between the camera or the gallery in Android

的启发

问题的答案不仅仅是一个意图。简单来说,在我的问题截屏中,有3个动作,即3个Intent。关键方法是Intent.createChooser()

这是我完整的代码:

public void click(View view) {
        File file = getExternalFilesDir(Environment.DIRECTORY_DCIM);
        Uri cameraOutputUri = Uri.fromFile(file);
        Intent intent = getPickIntent(cameraOutputUri);
        startActivityForResult(intent, -1);
    }

    private Intent getPickIntent(Uri cameraOutputUri) {
        final List<Intent> intents = new ArrayList<Intent>();

        if (true) {
            intents.add(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI));
        }

        if (true) {
            setCameraIntents(intents, cameraOutputUri);
        }

        if (intents.isEmpty()) return null;
        Intent result = Intent.createChooser(intents.remove(0), null);
        if (!intents.isEmpty()) {
            result.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents.toArray(new Parcelable[] {}));
        }
        return result;


    }

    private void setCameraIntents(List<Intent> cameraIntents, Uri output) {
        final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        final PackageManager packageManager = getPackageManager();
        final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
        for (ResolveInfo res : listCam) {
            final String packageName = res.activityInfo.packageName;
            final Intent intent = new Intent(captureIntent);
            intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
            intent.setPackage(packageName);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, output);
            cameraIntents.add(intent);
        }
    }

这是我的演示:  enter image description here