Android, как я могу выбрать изображение с камеры или галереи одновременно с одним намерением

1

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

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

Изображение 174551

Теги:
gallery
android-intent

2 ответа

0

Это не один Intent. Этот диалог является нижним листом.

0

Я уже знаю, как этого добиться. Вдохновленный намерением выбирать между камерой или галереей в 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);
        }
    }

Вот мое демо: Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню