본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] webview 에서 파일 업로드하기

by 돼지왕 왕돼지 2015. 12. 7.
반응형


@hide, @Override, action_get_content, addcategory, Android, CATEGORY_OPENABLE, document, file, hide, input type, intent, onreceivevalue, openfilechooser, override, ri, settype, setWebChromeClient, undocumented, ValueCallback, WebChromeClient, Webview, [android] webview 에서 파일 업로드하기, 파일 업로드


-

아래 input type 이 file 인 html 코드는 안드로이드 webview 에서 제대로 작동을 안 한다.

즉 해당 button 을 눌러도 파일 선택 창이 뜨지 않는다는 것.

<input type="file" name="file" />



-

이 경우 webview 에 WebChromeClient 를 set 해주면서 필요한 함수를 구현해주면 된다.

private static final int RC_FILE_CHOOSE = 2833;

private ValueCallback<Uri> mUploadMsg = null;


...

webView.setWebChromeClient(new WebChromeClient() {

// ICS 에서도 동작하기 위해서는 아래메소드도 넣어줘야함.

public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType) {

openFileChooser(uploadFile);

}


public void openFileChooser(ValueCallback<Uri> uploadMsg) {

mUploadMsg = uploadMsg;

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.addCategory(Intent.CATEGORY_OPENABLE);

intent.setType("*/*");

startActivityForResult(Intent.createChooser(intent, "File Chooser"), RC_FILE_CHOOSE );

}

});


@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);


if (requestCode == RC_FILE_CHOOSE && mUploadMsg != null) {

Uri result = null;

if ( data != null || resultCode == RESULT_OK ){

result = data.getData();

}

mUploadMsg.onReceiveValue(result);

mUploadMsg = null;

}

}

...


-

이상한 점은 openFileChooser 라는 함수가 WebChromeClient 에 존재하지만 @hide 처리가 되어있다.

즉 이 녀석은 document 화 되지 않은 메소드를 override 하는 것이다.

그래서 undocumented 이기 때문에 @Override 를 붙이면 안된다.





반응형

댓글