重写WebChromeClient,完成代码如下:
package com.cxwl.nst.supplyinfor.activity;
import Android.graphics.Bitmap;
import android.net.Uri;
import android.os.Message;
import android.view.View;
import android.webkit.ConsoleMessage;
import android.webkit.GeolocationPermissions;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebStorage;
import android.webkit.WebView;
abstract class TestWebChromeClient extends WebChromeClient {
private WebChromeClient mWrappedClient;
protected TestWebChromeClient(WebChromeClient wrappedClient) {
mWrappedClient = wrappedClient;
}
/** } */
@Override
public void onProgressChanged(WebView view, int newProgress) {
mWrappedClient.onProgressChanged(view, newProgress);
}
/** } */
@Override
public void onReceivedTitle(WebView view, String title) {
mWrappedClient.onReceivedTitle(view, title);
}
/** } */
@Override
public void onReceivedIcon(WebView view, Bitmap icon) {
mWrappedClient.onReceivedIcon(view, icon);
}
/** } */
@Override
public void onReceivedTouchIconUrl(WebView view, String url,
boolean precomposed) {
mWrappedClient.onReceivedTouchIconUrl(view, url, precomposed);
}
/** } */
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
mWrappedClient.onShowCustomView(view, callback);
}
/** } */
@Override
public void onHideCustomView() {
mWrappedClient.onHideCustomView();
}
/** } */
@Override
public boolean onCreateWindow(WebView view, boolean dialog,
boolean userGesture, Message resultMsg) {
return mWrappedClient.onCreateWindow(view, dialog, userGesture, resultMsg);
}
/** } */
@Override
public void onRequestFocus(WebView view) {
mWrappedClient.onRequestFocus(view);
}
/** } */
@Override
public void onCloseWindow(WebView window) {
mWrappedClient.onCloseWindow(window);
}
/** } */
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
return mWrappedClient.onJsAlert(view, url, message, result);
}
/** } */
@Override
public boolean onJsConfirm(WebView view, String url, String message,
JsResult result) {
return mWrappedClient.onJsConfirm(view, url, message, result);
}
/** } */
@Override
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, JsPromptResult result) {
return mWrappedClient.onJsPrompt(view, url, message, defaultValue, result);
}
/** } */
@Override
public boolean onJsBeforeUnload(WebView view, String url, String message,
JsResult result) {
return mWrappedClient.onJsBeforeUnload(view, url, message, result);
}
/** } */
@Override
public void onExceededDatabaseQuota(String url, String databaseIdentifier,
long currentQuota, long estimatedSize, long totalUsedQuota,
WebStorage.QuotaUpdater quotaUpdater) {
mWrappedClient.onExceededDatabaseQuota(url, databaseIdentifier, currentQuota,
estimatedSize, totalUsedQuota, quotaUpdater);
}
/** } */
@Override
public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota,
WebStorage.QuotaUpdater quotaUpdater) {
mWrappedClient.onReachedMaxAppCacheSize(spaceNeeded, totalUsedQuota, quotaUpdater);
}
/** } */
@Override
public void onGeolocationPermissionsShowPrompt(String origin,
GeolocationPermissions.Callback callback) {
mWrappedClient.onGeolocationPermissionsShowPrompt(origin, callback);
}
/** } */
@Override
public void onGeolocationPermissionsHidePrompt() {
mWrappedClient.onGeolocationPermissionsHidePrompt();
}
/** } */
@Override
public boolean onJsTimeout() {
return mWrappedClient.onJsTimeout();
}
/** } */
@Override
@Deprecated
public void onConsoleMessage(String message, int lineNumber, String sourceID) {
mWrappedClient.onConsoleMessage(message, lineNumber, sourceID);
}
/** } */
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
return mWrappedClient.onConsoleMessage(consoleMessage);
}
/** } */
@Override
public Bitmap getDefaultVideoPoster() {
return mWrappedClient.getDefaultVideoPoster();
}
/** } */
@Override
public View getVideoLoadingProgressView() {
return mWrappedClient.getVideoLoadingProgressView();
}
/** } */
@Override
public void getVisitedHistory(ValueCallback<String[]> callback) {
mWrappedClient.getVisitedHistory(callback);
}
/** } */
public void openFileChooser(ValueCallback<Uri> uploadFile) {
((TestWebChromeClient) mWrappedClient).openFileChooser(uploadFile);
}
}
2、activity页面引用
a、初始化 全局变量
private ValueCallback<Uri> mUploadMessage;
private final static int FILECHOOSER_RESULTCODE = 1;
b、onCreate中写如下代码
webView = (WebView) findViewById(R.id.supplyinfor_news_webview);
WebSettings webSettings = webView.getSettings();
webSettings.setAllowFileAccess(true);// 设置允许访问文件数据
webSettings.setJavaScriptEnabled(true);// 设置支持JavaScript脚本
webSettings.setBuiltInZoomControls(true);// 设置支持缩放
webView.getSettings().setBuiltInZoomControls(true);//启用触摸放大
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new TestWebChromeClient(new WebChromeClient()) {
// The undocumented magic method override
// Eclipse will swear at you if you try to put @Override here
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
supplyinforList.this.startActivityForResult(Intent.createChooser(i, getString(R.string.uploadStr)), supplyinforList.FILECHOOSER_RESULTCODE);
}
});
c、创建onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage)
return;
Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
}
}
<span class="lit">@Override</span>
<span class="kwd">public</span> <span class="kwd">void</span><span class="pln"> onCreate</span><span class="pun">(</span><span class="typ">Bundle</span><span class="pln"> savedInstanceState</span><span class="pun">)</span> <span class="pun">{</span>
<span class="kwd">super</span><span class="pun">.</span><span class="pln">onCreate</span><span class="pun">(</span><span class="pln">savedInstanceState</span><span class="pun">);</span><span class="pln">
setContentView</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">layout</span><span class="pun">.</span><span class="pln">main</span><span class="pun">);</span><span class="pln">
web </span><span class="pun">=</span> <span class="pun">(</span><span class="typ">WebView</span><span class="pun">)</span><span class="pln"> findViewById</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">webview01</span><span class="pun">);</span><span class="pln">
progressBar </span><span class="pun">=</span> <span class="pun">(</span><span class="typ">ProgressBar</span><span class="pun">)</span><span class="pln"> findViewById</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">progressBar1</span><span class="pun">);</span><span class="pln">
web </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">WebView</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">);</span><span class="pln">
web</span><span class="pun">.</span><span class="pln">getSettings</span><span class="pun">().</span><span class="pln">setJavaScriptEnabled</span><span class="pun">(</span><span class="kwd">true</span><span class="pun">);</span><span class="pln">
web</span><span class="pun">.</span><span class="pln">loadUrl</span><span class="pun">(</span><span class="str">"http://www.script-tutorials.com/demos/199/index.html"</span><span class="pun">);</span><span class="pln">
web</span><span class="pun">.</span><span class="pln">setWebViewClient</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> myWebClient</span><span class="pun">());</span><span class="pln">
web</span><span class="pun">.</span><span class="pln">setWebChromeClient</span><span class="pun">(</span><span class="kwd">new</span> <span class="typ">WebChromeClient</span><span class="pun">()</span>
<span class="pun">{</span>
<span class="com">//The undocumented magic method override </span>
<span class="com">//Eclipse will swear at you if you try to put @Override here </span>
<span class="com">// For Android 3.0+</span>
<span class="kwd">public</span> <span class="kwd">void</span><span class="pln"> openFileChooser</span><span class="pun">(</span><span class="typ">ValueCallback</span><span class="pun"><</span><span class="typ">Uri</span><span class="pun">></span><span class="pln"> uploadMsg</span><span class="pun">)</span> <span class="pun">{</span><span class="pln">
mUploadMessage </span><span class="pun">=</span><span class="pln"> uploadMsg</span><span class="pun">;</span>
<span class="typ">Intent</span><span class="pln"> i </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">Intent</span><span class="pun">(</span><span class="typ">Intent</span><span class="pun">.</span><span class="pln">ACTION_GET_CONTENT</span><span class="pun">);</span><span class="pln">
i</span><span class="pun">.</span><span class="pln">addCategory</span><span class="pun">(</span><span class="typ">Intent</span><span class="pun">.</span><span class="pln">CATEGORY_OPENABLE</span><span class="pun">);</span><span class="pln">
i</span><span class="pun">.</span><span class="pln">setType</span><span class="pun">(</span><span class="str">"image/*"</span><span class="pun">);</span>
<span class="typ">MyWb</span><span class="pun">.</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">startActivityForResult</span><span class="pun">(</span><span class="typ">Intent</span><span class="pun">.</span><span class="pln">createChooser</span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span><span class="str">"File Chooser"</span><span class="pun">),</span><span class="pln"> FILECHOOSER_RESULTCODE</span><span class="pun">);</span>
<span class="pun">}</span>
<span class="com">// For Android 3.0+</span>
<span class="kwd">public</span> <span class="kwd">void</span><span class="pln"> openFileChooser</span><span class="pun">(</span> <span class="typ">ValueCallback</span><span class="pln"> uploadMsg</span><span class="pun">,</span> <span class="typ">String</span><span class="pln"> acceptType </span><span class="pun">)</span> <span class="pun">{</span><span class="pln">
mUploadMessage </span><span class="pun">=</span><span class="pln"> uploadMsg</span><span class="pun">;</span>
<span class="typ">Intent</span><span class="pln"> i </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">Intent</span><span class="pun">(</span><span class="typ">Intent</span><span class="pun">.</span><span class="pln">ACTION_GET_CONTENT</span><span class="pun">);</span><span class="pln">
i</span><span class="pun">.</span><span class="pln">addCategory</span><span class="pun">(</span><span class="typ">Intent</span><span class="pun">.</span><span class="pln">CATEGORY_OPENABLE</span><span class="pun">);</span><span class="pln">
i</span><span class="pun">.</span><span class="pln">setType</span><span class="pun">(</span><span class="str">"*/*"</span><span class="pun">);</span>
<span class="typ">MyWb</span><span class="pun">.</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">startActivityForResult</span><span class="pun">(</span>
<span class="typ">Intent</span><span class="pun">.</span><span class="pln">createChooser</span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span> <span class="str">"File Browser"</span><span class="pun">),</span><span class="pln">
FILECHOOSER_RESULTCODE</span><span class="pun">);</span>
<span class="pun">}</span>
<span class="com">//For Android 4.1</span>
<span class="kwd">public</span> <span class="kwd">void</span><span class="pln"> openFileChooser</span><span class="pun">(</span><span class="typ">ValueCallback</span><span class="pun"><</span><span class="typ">Uri</span><span class="pun">></span><span class="pln"> uploadMsg</span><span class="pun">,</span> <span class="typ">String</span><span class="pln"> acceptType</span><span class="pun">,</span> <span class="typ">String</span><span class="pln"> capture</span><span class="pun">){</span><span class="pln">
mUploadMessage </span><span class="pun">=</span><span class="pln"> uploadMsg</span><span class="pun">;</span>
<span class="typ">Intent</span><span class="pln"> i </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">Intent</span><span class="pun">(</span><span class="typ">Intent</span><span class="pun">.</span><span class="pln">ACTION_GET_CONTENT</span><span class="pun">);</span><span class="pln">
i</span><span class="pun">.</span><span class="pln">addCategory</span><span class="pun">(</span><span class="typ">Intent</span><span class="pun">.</span><span class="pln">CATEGORY_OPENABLE</span><span class="pun">);</span><span class="pln">
i</span><span class="pun">.</span><span class="pln">setType</span><span class="pun">(</span><span class="str">"image/*"</span><span class="pun">);</span>
<span class="typ">MyWb</span><span class="pun">.</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">startActivityForResult</span><span class="pun">(</span> <span class="typ">Intent</span><span class="pun">.</span><span class="pln">createChooser</span><span class="pun">(</span><span class="pln"> i</span><span class="pun">,</span> <span class="str">"File Chooser"</span> <span class="pun">),</span> <span class="typ">MyWb</span><span class="pun">.</span><span class="pln">FILECHOOSER_RESULTCODE </span><span class="pun">);</span>
<span class="pun">}</span>
<span class="pun">});</span><span class="pln">
setContentView</span><span class="pun">(</span><span class="pln">web</span><span class="pun">);</span>
<span class="pun">}</span>
复制a,b,c三部分代码 基本上就可以实现upload上传了
============ 欢迎各位老板打赏~ ===========
与本文相关的文章
- · 【Unity】SQLite发布到Android
- · unity3D导出模块给android使用
- · XPosed模块开发:XPosed入门与登陆劫持演示
- · 解决android 安卓中横屏、竖屏切换 应用崩溃问题
- · 解决listView中textview超链接导致listitem点击事件失效问题
- · Android中LinearLayout的点击事件如何包含内部的子控件?
- · 关于Fragment 不响应onActivityResult的情况分析
- · Picasso-Android开源图片异步加载库
- · 如何用Fiddler对手机(安卓/iOS)数据进行抓包
- · PANIC: Could not open:my_avd.ini完美解决
- · 在 Android 模拟器中启用摄像头支持
- · Please use Android Tools > Fix Project Properties