본문 바로가기

안드로이드 개발/허니콤(3.0)

webview에서 input type="file" 파일 업로드 처리이슈 해결 팁

현재 갤탬 10.1 허니콤(3.2)기준 
 
특정웹페이지를 내장부라우저(구글)로 열었을때는 저장 업로드 버튼이
 
정상적으로 잘 작동해서 이미지를 올리거나 카메라로 찍은 사진을 올리는데
 
문제가 없습니다.
 
 
그런데
 
Webview에서 웹페이지에를 열었을때는 저장 업로드 버튼이 먹히지 않습니다.
 
눌러도 반응이 없습니다.@@ 
 
혹시 설명이 부족해서 이해가 안될까봐 이미지로 설명해 드리겠습니다.
(특정 로그가 있다보니 필요한 부분은 하얀색으로 처리했습니다.)
 
1) 웹페이지로 내장 브라우저(구글)로 접근을 해서 파일 버튼을 클릭했습니다.

 
2)  그러면 업로드 화면이 나와서 이미지를 바로 올리거나 카메라로 찍어서 올려집니다. 
 

 
3) 이미지명이 나타나고
 

 
웹페이지쪽에 정상적으로 이미지가 업로드가 완료됩니다.
 
 
그런데 WebView에서는 파일 선택 버튼이 눌러도 아예 먹히지 않고 있습니다.@@
 

참고로 파일선택버튼은 input type = "file"
으로 되어 있습니다.
 
WebView에서 커스터마이징에서 내장된 부라우저처럼 옵션창이 나오고 선택된 이미지를 올릴수 있도록
 
해야 되는데 검색을 해서 처리를 해봤는데 여전히 되질 않고있습니다.
 

========================================================================================================================================

 

위의 이슈에 대해서 해결팁을 정리하면 함수의 차이입니다. OS버젼에 따라 파라미터가 다른 오버로딩이 된 함수를 맞추어서

사용하시면 됩니다.(이걸 찾는데 애먹었습니다. ㅠ)

 //웹뷰에서의 파일 업로드 처리
        mWeb.setWebChromeClient(new WebChromeClient()
        {
         
         //public void openFileChooser(ValueCallback<Uri> uploadMsg) //  For Android < 3.0
         public void openFileChooser( ValueCallback<Uri> uploadMsg, String acceptType )   //  For Android  3.0+ (허니콤)
         {  
                                       
              mUploadMessage = uploadMsg;
                Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
                i.addCategory(Intent.CATEGORY_OPENABLE); 
                i.setType("*/*");
                //i.setType("image/*");
                MyWebView.this.startActivityForResult(
                  Intent.createChooser(i, "File Browser"),
                  FILECHOOSER_RESULTCODE);
 

             } 

        });

 

@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
  
      
    if(requestCode==FILECHOOSER_RESULTCODE) 
    { 
    
   Toast.makeText(this,"FILECHOOSER_RESULTCODE 진입", Toast.LENGTH_SHORT).show();
    if (null == mUploadMessage) return;
   
              Uri result = data == null || resultCode != RESULT_OK ? null : data.getData(); 
              mUploadMessage.onReceiveValue(result); 
              mUploadMessage = null;  
                
    }
  
   
 }