2016-06-01 72 views
4

Android webview에서 파일 업로드 옵션을 클릭하면 이미지 갤러리에서 업로드 할 파일을 선택하려는 사용자의 의도가 호출되는 onShowFileChooser가 호출됩니다. 인해 다음과 같은 이유에 충돌하여 onActivityResult 내부 파일을 선택 후onActivityResult에서 결과를 설정할 때 Android webview, 파일 업로드, 충돌이 발생합니다.

java.lang.IllegalStateException: Duplicate showFileChooser result 
     at org.chromium.android_webview.AwWebContentsDelegateAdapter$2.onReceiveValue(AwWebContentsDelegateAdapter.java:225) 
     at org.chromium.android_webview.AwWebContentsDelegateAdapter$2.onReceiveValue(AwWebContentsDelegateAdapter.java:220) 
     at com.android.webview.chromium.WebViewContentsClientAdapter$4.onReceiveValue(WebViewContentsClientAdapter.java:1063) 
     at com.android.webview.chromium.WebViewContentsClientAdapter$4.onReceiveValue(WebViewContentsClientAdapter.java:1047) 

답변

5
@Override 
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) { 
    mActivity.setValueCallback(filePathCallback); 
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 
    intent.setType("*/*"); 
    mActivity.startActivityForResult(Intent.createChooser(intent, ""), Final.REQUEST_CODE_ALBUM); 
    return true; 
} 

반환 사실

+1

"true를 돌려"나를 위해이 문제를 해결하는 부분이었다. 고맙습니다. –

0

난 당신이 웹보기를 구현하고 안드로이드에서 파일 업로드를 처리하는 웹보기 크롬 클라이언트를 확장 할 필요가 있다고 생각 전화 응용 프로그램. 이 부분을 읽을 수 있습니다 article webview 클라이언트 클래스 및 웹 크롬 클라이언트를 구현하는 방법을 이해하는 데 도움이 될 수도 있습니다

0

uri에서 데이터를 가져 와서 uri 배열의 새 객체를 만들기 때문일 수 있습니다. 당신이 filePathCallback를 호출에 onShowFileChooser 계획을 오버라이드 (override)하는 경우

Android.Net.Uri[] result = data == null || resultCode != Result.Ok ? null : new Android.Net.Uri[] { data.Data };

1

: 코드 아래

Android.Net.Uri result = data == null || resultCode != Result.Ok ? null : data.Data ; 
var a = new Android.Net.Uri[] { result }; 

에서 문제가 해결 : givinf 중복 오류했다 코드 : C#에서 나는 문제를 해결하기 위해 아래 수행 한 결과를 통과 시키려면 onShowFileChooser에서 true를 반환해야합니다.이 코드는 기본 코드가 filePathCallback으로 값을 전달하지 않도록합니다.

진정한

은 기본적으로 "나는 그것을 처리 할 것"말하고

문서 : @return true if filePathCallback will be invoked, false to use default handling.