마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 웹뷰안에 파일 업로드 부분

0 추천
package com.example.camera_app7;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class TestWebViewActivity extends Activity {
 
 private WebView webView;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.webcontent);
  
 webView = (WebView) findViewById(R.id.webView);
  
  webView.setWebViewClient(new HelloWebViewClient());
  webView.getSettings().setJavaScriptEnabled(true);
  
  webView.loadUrl("http://192.168.0.37:8080/imgup/upload.jsp");
  //String customHtml = "<html><body><h2>Greetings from JavaCodeGeeks</h2></body></html>";
  //webView.loadData(customHtml, "text/html", "UTF-8"); 
  
  webView.setWebChromeClient(new WebChromeClient() {
   // ICS 에서도 동작하기 위해서는 아래메소드도 넣어줘야함.
   public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType) {
    openFileChooser(uploadFile);
   }
 
   public void openFileChooser(ValueCallback<Uri> uploadMsg) {
    uploadMessage = uploadMsg;
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.addCategory(Intent.CATEGORY_OPENABLE);
    i.setType("*/*");
    startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
   }
  });
  
 }
 
 //링크된 페이지가 우리의 웹뷰안에서 로드되게 하기
 //웹뷰 클라이언트 재정의(WebViewClient)
 private class HelloWebViewClient extends WebViewClient{
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url){
   view.loadUrl(url);
   return true;
  }
 }
 
 private static final int FILECHOOSER_RESULTCODE = 1;
 private ValueCallback<Uri> uploadMessage = null;
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  
  if (requestCode == FILECHOOSER_RESULTCODE && uploadMessage != null) {
   Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
   uploadMessage.onReceiveValue(result);
   uploadMessage = null;
  }
 }
}



jsp부분에서 inputtype이 file로 되어 있습니다.

웹에서는 작동이되는데 웹뷰에서는 파일선택이 안됩니다. 답변 부탁 드리겠습니다.

JE개발자 (280 포인트) 님이 2015년 1월 22일 질문

1개의 답변

0 추천
실행하신 폰의 안드로이드 버전 문제일 수 있습니다.

버전이 정확히 기억나진 않는데

ICS 이하 -> 동작

젤리빈 -> 동작 안함

킷캣 (4.4.4) 이상  -> 동작

이랬던 것 같습니다.

관련 내용으로 한 번 검색해 보셔요~
가랑비 (10,530 포인트) 님이 2015년 1월 22일 답변
답변 감사드립니다.
제기기가 젤리빈(4.2.2)버전인데;
실행이 안돼네요.
public void openFileChooser(ValueCallback<Uri> uploadMsg)
이부분을 젤리빈 코드로 변경을 해봐야 겟네요
젤리빈 에서는 어떻게 해도 동작이 안되나요;;;;
...