-
아래 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 를 붙이면 안된다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] 강추 Graph open source library (0) | 2015.12.09 |
---|---|
[android] face detect and cropper (0) | 2015.12.08 |
[android] authenticator 관련 Tutorial (0) | 2015.12.05 |
[android] tv 앱 기본설정 (0) | 2015.12.04 |
[android] Shadow effect with custom shapes (0) | 2015.12.03 |
댓글