Program/Android Java

안드로이드 webview 파일 업로드

너구리V 2013. 1. 8. 11:47



webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPlusinsEnabled(true);
webView.loadUrl ("주소");
webView.setWebViewClient(new 웹뷰클라이언트)




mWebView.getSettings().setPluginsEnabled(true);


그런데 사용할수 없다는 한줄이 쫙~! 그어 있죠?
이건 sdk 버전과 함수 버전이 맞지 않아서 인데요.

위 함수를 지우고 아래 함수를 넣어 줍니다.

mWebView.getSettings().setPluginState(PluginState. ON);


그리고 PluginState 라인을 import 해줍니다.
그러면 웹뷰에서 바로 유투브 및 다른 동영상 플러그인을 재생할 수 있게 됩니다.

그럼 반대로 sdk 4.0 이하 버전에서는 전 함수를 사용해야 겠죠?


자 다음은 일반 웹사이트에서 html 태그인 input=file 에 대한 기능을 웹뷰에서 사용가능하게 해주는 함수 입니다.
스마트폰에 설치되어 있는 일반 브라우저에서는 바로 이 '파일첨부' 기능을 지원하지만, 웹뷰에서는 별도의 함수를 넣어주지 않으면 이 기능이 작동하지 않습니다.
소스가 좀 깁니다.





위와 같이 함수를 넣습니다. 직접 보시고 타이핑 해보세요. ^^;;
소스 위치 잘 보시고..

<--- 소스 추가
                  private ValueCallback<Uri> mUploadMessage;
private final static int FILECHOOSER_RESULTCODE = 1;
@Override
protected  void onActivityResult(int requestCode, int resultCode,
        Intent intent) {
    if (requestCode == FILECHOOSER_RESULTCODE) {
        if (null == mUploadMessage)
            return;
        Uri result = intent == null || resultCode != RESULT_OK ? null
                : intent.getData();
        mUploadMessage.onReceiveValue(result);
        mUploadMessage = null;
    }
}
소스 끝 --->



<--- 소스 시작
  mWebView.setWebChromeClient(new WebChromeClient()
  {
         @SuppressWarnings("unused")
       public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
             mUploadMessage = uploadMsg;
             Intent i = new Intent(Intent.ACTION_GET_CONTENT);
             i.addCategory(Intent.CATEGORY_OPENABLE);
             i.setType("*/*");
             Blog.this.startActivityForResult(
                     Intent.createChooser(i, "사진을 선택하세요"),
                     FILECHOOSER_RESULTCODE);
         }
   });
소스끝 --->




짜잔~~ 근데 작동을 안하는 군요. -_-;; 
아 그지 같에~ ㅠㅠ
여기서 상당히 삽질을 많이 했는데요.
엄청난 구글링 삽질덕에 답을 찾았습니다.





다시 편집 파일로 돌아와서 
바로 저기 한줄을 위와 같이 소스를 교체 해줍니다.
교체하고 저장하고 다시 AVD 실행~!





잘 작동하는 군요. ㅎㅎㅎ

참.. 안드로이드가 거시기 하네요.
대신 위 함수로 하위 버전의 sdk를 만들게 되면 또한 작동을 하지 않습니다.

참고로 위 소스에 대한 버전별 함수 정보 입니다. ( 안드로이드 펍 정보 )

// For Android < 3.0
      public void openFileChooser( ValueCallback<Uri> uploadMsg ){
          openFileChooser( uploadMsg, "" );
      }

// For Android 3.0+
      public void openFileChooser( ValueCallback<Uri> uploadMsg, String acceptType ){  
          mUploadMessage = uploadMsg;  
          Intent i = new Intent(Intent.ACTION_GET_CONTENT);  
          i.addCategory(Intent.CATEGORY_OPENABLE);  
          i.setType("image/*");  
          startActivityForResult( Intent.createChooser( i, "File Chooser" ),    WebViewACT.FILECHOOSER_RESULTCODE );  
      }

// For Android 4.1+
      public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
          openFileChooser( uploadMsg, "" );
      }

사실 여태 간단한 웹뷰를 많이 만들어 본 경험으로는 아직까지는 4.0.3 버전이 가장 많이 쓰이고 문제가 없지 않나.. 합니다.
갤 1/2/3 에서 모두 잘 작동되는 걸 확인도 했었고..
그래도 아마 젤라빈이 모두 업데이트가 되면, 또 신경써야 겠죠..거참~ ^^;



반응형

'Program > Android Java' 카테고리의 다른 글

삼성 멀티윈도우 어플 지원 방법  (6) 2013.01.08
app 기획 자료  (0) 2013.01.08
gcm 다른 패키지에 쓰기  (0) 2012.12.12
gps 켜고 끄기  (0) 2012.11.28
[Android] shortcut(바로가기)기능  (0) 2012.11.28