Кнопка «Выбрать файл» не работала после изменения разрешения - PullRequest
0 голосов
/ 20 января 2020

Привет, мой проект требует, чтобы я работал с webview и камерой. Я реализовал коды в HTML, которые после нажатия кнопки «Выбрать файл» в веб-просмотре позволят мне выбрать, снимать ли фотографию с помощью камеры или загружать файлы из моего файлового менеджера. Но мне не нужна опция файла, я просто хочу, чтобы она запускала камеру сразу после нажатия кнопки. Это код, в котором запрашивается разрешение на использование моей камеры и внешнего хранилища

public void get_file(){
    String[] perms = {/*Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, */Manifest.permission.CAMERA};

    //Checking for CAMERA Permissions first
    //if (ASWP_CAMUPLOAD && check_permission(3)) {
        //ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, file_perm);

    //Checking for storage permission to write images for upload
    if (ASWP_FUPLOAD && ASWP_CAMUPLOAD && !check_permission(2) && !check_permission(3)) {
        ActivityCompat.requestPermissions(MainActivity.this, perms, file_perm);

    //Checking for WRITE_EXTERNAL_STORAGE permission
    } else if (ASWP_FUPLOAD && !check_permission(2)) {
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, file_perm);

    //Checking for CAMERA permissions
    } else if (ASWP_CAMUPLOAD && !check_permission(3)) {
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, file_perm);
    }
}
public boolean check_permission(int permission){
    switch(permission){
        case 1:
            return ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;

        case 2:
            return ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;

        case 3:
            return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED;

    }
    return false;
}

И это код, который я изменил

static boolean ASWP_FUPLOAD     = false;     //upload file from webview
static boolean ASWP_ONLYCAM     = true ;     //only use camera as input

Я изменил файл загрузки из веб-просмотра от истинного к ложному. Но странно то, что после того, как я изменил его на false, нажатие кнопки больше не работало. Что я сделал не так? Если я хочу использовать только камеру, я должен удалить некоторые из строк в publi c void get_file ()? Надеюсь на некоторые советы, спасибо! Изменить: я нашел один код, который является ASWP_ONLYCAM, который включает только камеру в качестве единственного входа! Но я понятия не имею, как его активировать! Пожалуйста, дайте мне знать, если вам нужно больше информации

1 Ответ

0 голосов
/ 20 января 2020

Как я вижу, вы используете Android SmartWebView .

Я полагаю, что вы поддерживаете себя с кодом из здесь (ProgramCreek) , в качестве вашего методы пока одни и те же. если это так, и ASWP_FUPLOAD, и ASWP_CAMUPLOAD должны быть true, поскольку ASWP_CAMUPLOAD зависит от ASWP_FUPLOAD.

Тогда вам необходимо go внутри MainActivity. Внутри asw_view.setWebChromeClient() у вас должны быть следующие пустоты:

public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback,WebChromeClient.FileChooserParams fileChooserParams)

Существует логика c для управления фотографиями. Первый совместим с Android API 16+, второй - с 21+.

Теперь, что касается API 16+ (первый метод), я не вижу прямого решения. Вы можете использовать один из этой темы . Второй способ, однако, легко редактируемый. У вас есть if операторов, проверяющих ASWP_CAMUPLOAD и ASWP_FUPLOAD. В конце проверки ASWP_CAMUPLOAD вы получите следующее:

if(ASWP_CAMUPLOAD) {
    //...
} else {
    intentArray = new Intent[0];
}

return false, поэтому сама загрузка файла должна быть отменена, и загрузка камеры станет единственным решением.

...