Android Study

WebView에서 파일 업로드(이미지) 버튼 이벤트 안될때

85chong 2019. 12. 13. 17:44
728x90
반응형
SMALL

 * 웹뷰에서의 작업환경은 어떤 상태인지 확인하지 못함

 

하이브리드 작업중 발생한 문제를 아래와 같이 해결하여서 기록함.

ValueCallback mFilePathCallback;

......



//webview 안에 아래와 같이 chomeclient 셋팅 해주는 부분이 있을것임 아래와 같이 해줌

webView.setWebChromeClient(new WebChromeClient(){ 
            @Override 
            public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) { 
                mFilePathCallback = filePathCallback; 

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

                startActivityForResult(intent, 0); 
                return true; 
            } 
        });

 

// 아래와 같이 파일 선택후의 작업도 해준다.

@Override 
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 
        Log.e("resultCode:: ", String.valueOf(resultCode)); 
        if(requestCode == 0 && resultCode == Activity.RESULT_OK){ 
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
                mFilePathCallback.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data)); 
            }else{ 
                mFilePathCallback.onReceiveValue(new Uri[]{data.getData()}); 
            } 
            mFilePathCallback = null; 
        }else{ 
            mFilePathCallback.onReceiveValue(null); 
        } 
    }

//위와같이 하면 안드로이드 자체의 이미지 파일 선택하는 기본  Intent 가 자동으로 뜨고, 이미지를 선택하면 , 해당 웹뷰 안에 파일이 첨부가 된다.

 

 

//위의 방법말고, 선택시 onShowFileChooser( )로 이벤트를 받고, 앱에 있는 파일업로드 등의 기능을 사용하는 방법도 있지만, 복잡하다.