Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android webView webchromeclient 本地圖片資源

android webView webchromeclient 本地圖片資源

編輯:關於Android編程

解決android webView openFileChooser 不能調用本地文件

其實主要問題是出現在webChromeClient 的身上,通過查看webChromeClient的源代碼我我們知道裡面有個openFileChooser函數,不過很可惜,這個函數是不公開的,即使我們使用繼承也不能使用這個函數。哈哈,那怎麼辦呢?
我們還是來看看這個函數具體長成啥樣吧。
其實它是這樣的
/**
* Tell the client to open a file chooser.
* @param uploadFile A ValueCallback to set the URI of the file to upload.
* onReceiveValue must be called to wake up the thread.a
* @param acceptType The value of the 'accept' attribute of the input tag
* associated with this file picker.
* @param capture The value of the 'capture' attribute of the input tag
* associated with this file picker.
* @hide
*/
public void openFileChooser(ValueCallback uploadFile, String acceptType, String capture) {
uploadFile.onReceiveValue(null);
}
,是的它就是這樣的。於是,那麼問題來了,我們要怎麼才能使用這個函數呢?哈哈,是不是已經猜到了?對哦,我們只要寫個一樣的函數,然後公開就可以了。於是,我們繼承的類是這樣的。

public class WebChromeClientEx extends WebChromeClient {

    // 用來實現webview js 調用本地圖庫的接口
    public void openFileChooser(ValueCallback uploadFile) {

    }

    public void openFileChooser(ValueCallback uploadFile, String acceptType) {

    }

    public void openFileChooser(ValueCallback uploadFile,
            String acceptType, String capture) {

    }


}

好了,現在你會發現居然多出了兩個函數,那麼這是為什麼呢?具體的源代碼大家就自己去了解吧,我也不多費口舌了。
這樣我們就可以這樣調用了
@Override
public void openFileChooser(ValueCallback uploadFile,
String acceptType, String capture) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
this.startActivityForResult(
Intent.createChooser(intent, "完成操作需要使用"),
FILECHOOSER_RESULTCODE);
}

好了,大家去試試吧。至於不同的版本,大家可以在不同的函數裡面去實現哦。
謝謝大家!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved