讓Android中的webview支持頁面中的文件上傳

pcimt 11年前發布 | 177K 次閱讀 Android開發 移動開發 WebView

android webview在默認情況下是不支持網頁中的文件上傳功能的;

如果在網頁中有<input type="file" />,在android webview中訪問時也會出現瀏覽文件的按鈕

但是點擊按鈕之后沒有反應...

那么如何能夠讓android的webview能夠響應,這個瀏覽按鈕呢?

我們需要為webview設置WebChromeClient,在WebChromeClient的實現類中覆蓋文件選擇的方法:

    /***************** android中使用WebView來打開本機的文件選擇器 *************************/  
            // js上傳文件的<input type="file" name="fileField" id="fileField" />事件捕獲  
            // Android > 4.1.1 調用這個方法  
            public void openFileChooser(ValueCallback<Uri> uploadMsg,  
                    String acceptType, String capture) {  
                mUploadMessage = uploadMsg;  
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);  
                intent.addCategory(Intent.CATEGORY_OPENABLE);  
                intent.setType("image/*");  
                context.startActivityForResult(  
                        Intent.createChooser(intent, "完成操作需要使用"),  
                        WebMainActivity.FILECHOOSER_RESULTCODE);  

            }  

            // 3.0 + 調用這個方法  
            public void openFileChooser(ValueCallback<Uri> uploadMsg,  
                    String acceptType) {  
                mUploadMessage = uploadMsg;  
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);  
                intent.addCategory(Intent.CATEGORY_OPENABLE);  
                intent.setType("image/*");  
                context.startActivityForResult(  
                        Intent.createChooser(intent, "完成操作需要使用"),  
                        WebMainActivity.FILECHOOSER_RESULTCODE);  
            }  

            // Android < 3.0 調用這個方法  
            public void openFileChooser(ValueCallback<Uri> uploadMsg) {  
                mUploadMessage = uploadMsg;  
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);  
                intent.addCategory(Intent.CATEGORY_OPENABLE);  
                intent.setType("image/*");  
                context.startActivityForResult(  
                        Intent.createChooser(intent, "完成操作需要使用"),  
                        WebMainActivity.FILECHOOSER_RESULTCODE);  

            }  
            /************** end ***************/  
在設置WebChromeClient時,要傳入一個ValueCallback<Uri> mUploadMessage,同時傳入webview所在的Activity的對象;

在WebChromeClient的實現類中對應的文件選擇事件響應的方法里,使用webview所在的activity對象開啟一個android文件選擇器,

使用startActivityForResult方法,在開啟的文件選擇activity結束后需要返回一個值;在webview所在的activity中通過覆蓋Activity的onActivityResult方法,得到所需的結果,即選擇文件的url

 * 返回文件選擇 
 */  
@Override  
protected void onActivityResult(int requestCode, int resultCode,  
        Intent intent) {  
    if (requestCode == FILECHOOSER_RESULTCODE) {  
        mUploadMessage = wcci.getmUploadMessage();  
        if (null == mUploadMessage)  
            return;  
        Uri result = intent == null || resultCode != RESULT_OK ? null  
                : intent.getData();  
        mUploadMessage.onReceiveValue(result);  
        mUploadMessage = null;  

    }  
}  
完成上述操作后就成功的實現了android webview支持文件上傳。。。

 本文由用戶 pcimt 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!