В веб-представлении отображается небольшой значок с изображением разбитого изображения после нажатия значка «Да» на экране настройки камеры. - PullRequest
0 голосов
/ 10 апреля 2020

Я создаю приложение для загрузки URL-адреса в веб-представлении. Я создал Image Chooser, чтобы начать работу по выбору фотографии из галереи и камеры.

A) Выбор изображения из галереи работает отлично. B) Когда я снимаю изображение через камеру, в веб-представлении отображается маленький значок с изображением разбитого изображения.

Примечание: Фотография с камеры отлично отображается на веб-изображении, когда я остаюсь более 5-8 секунд на экране камеры после захвата изображения. Но это должно работать, даже если я быстро нажму кнопку YES после захвата изображения.

Вот мой веб-вид Код для набора WebChromeClient

        webView.setWebChromeClient(new WebChromeClient() {

            @Override
            public boolean onShowFileChooser(
                    WebView webView, ValueCallback<Uri[]> newFilePathCallback,
                    FileChooserParams fileChooserParams) {

                if (filePathCallback != null) {
                    filePathCallback.onReceiveValue(null);
                }
                filePathCallback = newFilePathCallback;

                Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                    Log.d("Mainn", "onShowFileChooser()");
                    // Create the File where the photo should go
                    File photoFile = null;
                    try {
                        photoFile = createImageFile();
                    } catch (IOException e) {
                        Log.d("Mainn", "onShowFileChooser().. e : " + e.getLocalizedMessage());
                        e.printStackTrace();
                    }

                    Log.d("Mainn", "onShowFileChooser() 4");
                    // Continue only if the File was successfully created
                    if (photoFile != null) {
                        Log.d("Mainn", "onShowFileChooser() 5");
                        cameraPhotoPath = "file:" + photoFile.getAbsolutePath();
                        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                                Uri.fromFile(photoFile));
                    } else {
                        Log.d("Mainn", "onShowFileChooser() 6");
                        takePictureIntent = null;
                    }
                }
                Log.d("Mainn", "onShowFileChooser() 7");
                Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
                contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
                contentSelectionIntent.setType("image/*");

                Intent[] intentArray;
                if (takePictureIntent != null) {
                    Log.d("Mainn", "onShowFileChooser() 8");
                    intentArray = new Intent[]{takePictureIntent};
                } else {
                    Log.d("Mainn", "onShowFileChooser() 9");
                    intentArray = new Intent[0];
                }

                Log.d("Mainn", "onShowFileChooser() 10");
                Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
                chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
                chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);

                startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE);

                return true;
            }
        });
    }

onActivityResult () Код здесь

    @Override
    public void onActivityResult(int requestCode, int resultCode, final Intent data) {
        if (requestCode != INPUT_FILE_REQUEST_CODE || filePathCallback == null) {
            super.onActivityResult(requestCode, resultCode, data);
            return;
        }

        Uri[] results = null;

        // Check that the response is a good one
        if (resultCode == Activity.RESULT_OK) {
            if (data == null) {
                // If there is not data, then we may have taken a photo
                if (cameraPhotoPath != null) {
                    results = new Uri[]{Uri.parse(cameraPhotoPath)};
                }
            } else {
                String dataString = data.getDataString();
                if (dataString != null) {
                    results = new Uri[]{Uri.parse(dataString)};
                }
            }
        }

        filePathCallback.onReceiveValue(results);
        filePathCallback = null;

    }

1 Ответ

0 голосов
/ 10 апреля 2020

Используйте FileProvider вместо Uri.fromFile (). Это решит эту проблему.

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

Uri uri = FileProvider.getUriForFile(getActivity(), getActivity().getPackageName(), photoFile);
takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...