-
WebView 기본 구현으로는 html 의 <input type=“file”> 를 처리할 수 없다.
-
Webview 에서 file upload btn 이 클릭되었을 때
WebChromeClient 의 callback 이 불리게 되며, 여기서 param 으로 전달되는 callback 객체에 Uri 를 전달해주어야 file upload 를 시킬 수 있다.
-
그럼 file upload btn 이 클릭되었을 때 어떤 callback 이 불리느냐?
이 부분은 직접 테스트한 것은 아니고, 인터넷 정보에 따르면...
android 3.0 (HoneyComb) 미만에서는 아래 callback 이..
public void openFileChooser( ValueCallback<uri> uploadMsg)
android 3.0 이상 ~ 4.1( JB ) 미만에서는 아래 callback 이..
public void openFileChooser( ValueCallback<uri> uploadMsg, String acceptType)
android 4.1 이상 ~ 5.0 (Lollipop) 미만에서는 아래 callback 이..
public void openFileChooser(ValueCallback<uri> uploadMsg, String acceptType, String capture)
android 5.0 이상에서는 아래 callback 이..
public boolean onShowFileChooser(
WebView webView,
ValueCallback<uri[]> filePathCallback,
WebChromeClient.FileChooserParams fileChooserParams)
불린다고 한다.
-
최신 WebChromeClient 소스에 가보면…
아래와 같이 되어있는데, 이는 WebView 가 LOS 부터 따로 업데이트 되면서 이 녀석이 deprecate 되어 쓰면 안 된다는 것을 명시적으로 보여주는 것으로 보인다. (@hide 설명에 따르면 사실 이 녀석은 그 전 버전에서도 사실은 사용했으면 안 되는 녀석인데.. 그냥 불렸나보다..)
/**
* @hide This method was not published in any SDK version.
*/
@SystemApi
@Deprecated
public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture) {
uploadFile.onReceiveValue(null);
}
-
openFileChooser callback 을 받으면, acceptType 에 mimeType 이 들어있기 때문에,
해당 mimeType 을 처리할 수 있는 app 을 실행시켜서 uri 을 얻어오고 해당 uri 를 전달된 callback 을 통해 전달해주면 된다.
-
android 5.0(LOS) 미만과의 호환성을 위해서 READ_EXTERNAL_STORAGE 권한이 필요할 수 있고, target 이 NOS 이상인 경우에는 FileProvider 를 사용해야 할 수도 있다.
상황에 따라서는 Storage 관련 Runtime permission 을 정의해야 할 수도 있다.
끝
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] Define relationships between objects - Room 에 대해 알아보자 (0) | 2021.05.01 |
---|---|
[android] FileProvider 에 알아보자 (0) | 2021.02.16 |
[android] 국제화 text style 입히기 (0) | 2021.01.27 |
[android] finishAffinity() 와 finishAndRemoveTask() 에 대하여 with 실험 (0) | 2021.01.27 |
[android] context 마스터 하기! (0) | 2021.01.26 |
댓글