【问题标题】:Android how can I pick image from camera or gallery at the same time with one IntentAndroid如何使用一个意图同时从相机或图库中选择图像
【发布时间】:2019-04-13 00:16:59
【问题描述】:

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

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

【问题讨论】:

    标签: android android-intent gallery


    【解决方案1】:

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

    qustion 的答案不仅仅是一个 Intent。简单地说,在我的问题截图中,有 3 个动作,这意味着 3 个意图。关键方法是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);
            }
        }
    

    这是我的演示:

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多