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

안드로이드 webview kitkat -fileupload

0 추천

제목만 보셔도 대부분 어떤문제이실지 아실겁니다..ㅠ

웹뷰에서 파일업로드부분인데 kitkat버젼에서는 아무리해도 동작을 안해요 ㅠ

public class MainActivity extends Activity {
    PullToRefreshWebView mPullRefreshWebView;
    public WebView mWebView;
    public static String TAG = "MainActivity";
    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;

        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startActivity(new Intent(MainActivity.this, SplashActivity.class));
        mPullRefreshWebView = (PullToRefreshWebView) findViewById(R.id.WebView1);

        mWebView = mPullRefreshWebView.getRefreshableView();
        mWebView.getSettings().setJavaScriptEnabled(true);

        mWebView.setWebViewClient(new SampleWebViewClient());
        mWebView.setWebChromeClient(new MyWebChromeClient());
        mWebView.loadUrl("http://realhome.today/");
    }

    class MyWebChromeClient extends WebChromeClient {
        public void onProgressChanged(WebView view, int newProgress) {
            if(newProgress == 100) {
                mPullRefreshWebView.onRefreshComplete();
            }
        }

        public void openFileChooser(ValueCallback<Uri> uploadMsg) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);

        }

        // For Android 3.0+
        public void openFileChooser(ValueCallback uploadMsg, String acceptType) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("*/*");
            MainActivity.this.startActivityForResult(
                    Intent.createChooser(i, "File Browser"),
                    FILECHOOSER_RESULTCODE);
        }

        //For Android 4.1
        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("image/*");
            MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), MainActivity.FILECHOOSER_RESULTCODE);
        }
    }

    private static class SampleWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

다른사이트에 남아있는 예제를 전부 적용해봐도 간간히

file chooser result mode = 0 file paths = 이런오류만 나오면서 동작을 안하네요..

혹시 적용하신분 있으시면 좀 도와주세요.. 정말 머리아프네요 ㅠ

http://fimtrus.tistory.com/77  랑

https://github.com/applusform/WebViewFileUploadFix 여기있는 예제도 적용해봤습니다만..실패

검정색고양이 (1,040 포인트) 님이 2015년 11월 24일 질문

1개의 답변

0 추천
 
채택된 답변

openFileChooser 는 정식지원 API 가 아닌데다가 현재 버전이 바뀌면서 해당 함수를 지원하지 않습니다. 

대신 onShowFileChooser 를 쓰면 되며 해당 예제는 아래를 참고하시면 됩니다. 

https://github.com/GoogleChrome/chromium-webview-samples/blob/master/input-file-example/app/src/main/java/inputfilesample/android/chrome/google/com/inputfilesample/MainFragment.java 

aucd29 (218,390 포인트) 님이 2015년 11월 24일 답변
검정색고양이님이 2015년 11월 26일 채택됨
저한테는 안되네요...
테스트 해본 코드라서 잘 되던데요?
죄송합니다 ㅠ 다른방법이긴 하지만 해결했어요 ㅠㅠ 답변달아주신거 감사합니다!
...