Как я могу загрузить несколько изображений из галереи? - PullRequest
0 голосов
/ 19 ноября 2018

Я могу выбрать одно изображение из галереи, но не могу выбрать несколько изображений.
Я получил информацию об этом в Google и нашел добавьте EXTRA_ALLOW_MULTIPLE в putExtra , но это не работает для меня.Кто-нибудь может мне помочь?
Моя проблема заключается в загрузке файлов на веб-просмотр.Я нацеливаюсь на os6, os7 или os8.

мой код:

    mWebview.setWebChromeClient(new WebChromeClient() {
        protected void openFileChooser(ValueCallback uploadMsg, String acceptType) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            i.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
            i.setAction(Intent.ACTION_PICK);
            startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE);
        }

обновление Спасибо всем.Наконец, я могу выбрать как одно изображение, так и несколько изображений из галереи.Это мое решение, мне нужно очистить ненужный код, хотя.

    mWebview.setWebChromeClient(new WebChromeClient() {
        protected void openFileChooser(ValueCallback uploadMsg, String acceptType) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.setType("image/*");
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
            startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE);
        }

        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
            if (uploadMessage != null) {
                uploadMessage.onReceiveValue(null);
                uploadMessage = null;
            }

            uploadMessage = filePathCallback;

            Intent intent = fileChooserParams.createIntent();
            intent.setType("image/*");
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
            try {
                startActivityForResult(intent, REQUEST_SELECT_FILE);
            } catch (ActivityNotFoundException e) {
                uploadMessage = null;
                Toast.makeText(MainActivity.this.getApplicationContext(), "can't choose files", Toast.LENGTH_LONG).show();
                return false;
            }
            return true;
        }
    });


@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        if (requestCode == REQUEST_SELECT_FILE) {
            if (uploadMessage == null) return;

            ClipData clipData = intent.getClipData();
            if (clipData != null && clipData.getItemCount() > 0) {
                Uri[] results = new Uri[clipData.getItemCount()];
                for (int i = 0; i < clipData.getItemCount(); i++) {
                    ClipData.Item item = clipData.getItemAt(i);
                    results[i] = item.getUri();
                }

                uploadMessage.onReceiveValue(results);
                uploadMessage = null;
            } else {
                uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent));
                uploadMessage = null;
            }

        }
    } else if (requestCode == FILECHOOSER_RESULTCODE) {
        if (null == mUploadMessage) return;

        Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData();
        mUploadMessage.onReceiveValue(result);
        mUploadMessage = null;
    } else {
        Toast.makeText(MainActivity.this.getApplicationContext(), "fail to upload files", Toast.LENGTH_LONG).show();
    }
}

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018
Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image*//*");
String[] extraMimeTypes = {"image/*"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, extraMimeTypes);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, REQUEST_CODE_GALLERY);

Попробуй это. Работает во всех версиях.

0 голосов
/ 19 ноября 2018

Отредактируйте свой код, т.е. Удалить:

i.setAction(Intent.ACTION_PICK);

Следуйте ниже код:

Intent intent = new Intent();
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1);
0 голосов
/ 19 ноября 2018

используйте средство выбора изображений

 ImagePicker.create(UploadPhotosActivity.this)
            .showCamera(false)
            .limit(2)  // set your limit here
            .imageTitle(getString(R.string.select_image))
            .folderTitle(getString(R.string.folder))
            .theme(R.style.ImagePickerTheme)
            .start(RC_CODE_PICKER);  

добавьте их в свою зависимость

compile 'com.github.esafirm.android-image-picker:imagepicker:1.5.0'
compile 'com.github.esafirm.android-image-picker:rximagepicker:1.5.0'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...