Android, как я могу выбрать изображение с камеры или галереи одновременно с одним намерением - PullRequest
1 голос
/ 13 апреля 2019

Вот реализация, которую я нашел в приложении с именем Pawoo.Я могу выбрать сделать снимок или выбрать изображение из встроенной галереи системы или из сторонней галереи одновременно.

Интересно, как этого добиться всего лишь одним Намерением.Потому что, кажется, не реализуется сторонней библиотекой.

enter image description here

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

Я уже знаю, как этого добиться. Вдохновленный Намерение выбирать между камерой или галереей в Android

Ответом на вопрос является не просто Намерение. Просто, в моем скриншоте вопроса, есть 3 действия, это означает 3 Intents. Ключевой метод - 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

0 голосов
/ 13 апреля 2019

Это не один Intent.Этот диалог представляет собой нижний лист .

...