WebView 파일 업로드 취소 팝업 이후 응답하지 않음 이벤트 다시 클릭

2461 단어
웹View에서 파일을 업로드하면 더 이상 말하지 않고 코드를 올립니다
webview.setWebChromeClient(new WebChromeClient() {

        // For Android < 3.0
        public void openFileChooser(ValueCallback valueCallback) {
            ***
        }

        // For Android  >= 3.0
        public void openFileChooser(ValueCallback valueCallback, String acceptType) {
            ***
        }

        //For Android  >= 4.1
        public void openFileChooser(ValueCallback valueCallback, 
                String acceptType, String capture) {
            ***
        }

        // For Android >= 5.0
        @Override
        public boolean onShowFileChooser(WebView webView, 
                ValueCallback filePathCallback, 
                WebChromeClient.FileChooserParams fileChooserParams) {
            ***
            return true;
        }
    });


파일 선택 완료 후 콜백, 사진 업로드의 예
    /***
     *        
     * @param list
     */
    public void setChooseFile(ArrayList list) {
        KLog.e(TAG, "webfragment      :" + list.size());
        Uri[] results = null;
        Uri uriResult = null;
        if (null != list && list.size() > 0) {
            TImage tImage = list.get(0);
            //       
            String compressPath = tImage.getCompressPath();
            results = new Uri[]{Uri.fromFile(new File(compressPath))};
            uriResult = Uri.fromFile(new File(compressPath));
        }
        if (null != uploadMessageAboveL) {
            uploadMessageAboveL.onReceiveValue(results);
        } else if (null != mValueCallback) {
            mValueCallback.onReceiveValue(uriResult);
        }
    }

그러나 때때로 우리는 업로드 버튼을 눌렀지만 어떤 파일도 업로드하지 않고 종료할 때가 있다. 이때 업로드 버튼을 다시 눌러서 파일을 선택할 수 있는 팝업 창을 표시하지 않는다. (예를 들어 사진을 올릴 때 앨범에서 선택하거나 사진으로 얻은 다이아로그를 표시하지 않는다) 해결 방법은 다음과 같다. 선택한 파일의 리셋을 모두null로 설정한다.
/***
     *            
     *             
     */
    public void cancleChooseFileDialog() {
        if (null != uploadMessageAboveL) {
            uploadMessageAboveL.onReceiveValue(null);
            uploadMessageAboveL = null;
        }
        if (null != mValueCallback) {
            mValueCallback.onReceiveValue(null);
            mValueCallback = null;
        }
    }

이 방법은 다이얼로그의 cancle 리셋에서 호출합니다. 또한 이 다이얼로그를 cancle만 누르면 취소되는 모드로 설정하십시오. 그렇지 않으면 다이얼로그 이외의 부분을 누르면 다이얼로그가 사라지지만 이 리셋은 실행되지 않습니다.

좋은 웹페이지 즐겨찾기