Почему я не могу открыть камеру из веб-просмотра в android? - PullRequest
0 голосов
/ 06 марта 2020

У меня проблема с тем, что я не могу открыть камеру из веб-просмотра, так как у меня есть страница php, поэтому я должен открыть галерею и камеру оттуда, но я не могу сделать то, что получил по этой ссылке " https://gist.github.com/jhonsore/8a8378c147ec00ac6f3fa53569c82ef8». Я могу открыть галерею, но не камеру, пожалуйста, дайте мне решение.

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Предоставили ли вы разрешение Camera для вашего WebView WebChromeClient?

Пожалуйста, добавьте разрешение камеры в AndroidManifest. xml.

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CAMERA2" />

Установите WebChromeClient в ваш WebView.

webView.setWebChromeClient(new ChromeClient())

Определите свой класс ChromeClient.

public class ChromeClient extends WebChromeClient {

        @Override
        public boolean onShowFileChooser(WebView view, ValueCallback<Uri[]> filePath, WebChromeClient.FileChooserParams fileChooserParams) {
            if (!hasPermissions(MainActivity.this, PERMISSIONS)) {
                checkStoragePermission();
                return false;
            }
            // Double check that we don't have any existing callbacks
            if (mFilePathCallback != null) {
                mFilePathCallback.onReceiveValue(null);
            }
            mFilePathCallback = filePath;

            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                // Create the File where the photo should go
                File photoFile = createImageFile();
                takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);

                // Continue only if the File was successfully created
                if (photoFile != null) {
                    mCameraPhotoPath = "file:" + photoFile.getAbsolutePath();
                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                            Uri.fromFile(photoFile));
                } else {
                    takePictureIntent = null;
                }
            }

            Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
            contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
            contentSelectionIntent.setType("image/*");

            Intent[] intentArray;
            if (takePictureIntent != null) {
                intentArray = new Intent[]{takePictureIntent};
            } else {
                intentArray = new Intent[0];
            }

            Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
            chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
            chooserIntent.putExtra(Intent.EXTRA_TITLE, "Select Photo");
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);

            startActivityForResult(chooserIntent, Constant.INPUT_FILE_REQUEST_CODE);

            return true;

        }
    }

Вот переменные.

String[] PERMISSIONS = {
        Manifest.permission.CAMERA,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
};

private ValueCallback<Uri[]> mFilePathCallback;
private String mCameraPhotoPath;

Проверьте права доступа к хранилищу и камере.

 private void checkStoragePermission() {
        String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, Constant.REQUEST_STORAGE_PERMISSION);
        } else {
            checkCameraPermission();
        }
    }

    private void checkCameraPermission() {
        String permission = Manifest.permission.CAMERA;
        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, Constant.REQUEST_CAMERA_PERMISSION);
        } else {
            onPermissionGranted();
        }
    }

После этого я могу получить доступ к камере и галерее.

Надеюсь, это поможет.

0 голосов
/ 06 марта 2020

Конечно, вам нужны разрешения для открытия камеры на android.

Отредактируйте манифест следующим образом:

<uses-permission android:name="android.permission.CAMERA" />

Возможно, вам также нужна библиотека, не включенная

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...