让Android的webview支持H5的图片上传,无需原生开发功能
2017-10-25 13:42
741 查看
Android的页面上只需要放入一个webview就可以了;
package com.vlinker.webview;
import com.vlinker.vlife.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.net.Uri;
import android.net.http.SslError;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MyWb extends Activity {
/** Called when the activity is first created. */
WebView web;
ProgressBar progressBar;
private ValueCallback mUploadMessage;
private final static int FILECHOOSER_RESULTCODE = 1;
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
try {
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage)
return;
Uri result = intent == null || resultCode != RESULT_OK ? null: intent.getData();
if(result==null){
mUploadMessage.onReceiveValue(null);
}else{
mUploadMessage.onReceiveValue(new Uri[]{result});
}
mUploadMessage = null;
}
}catch (Exception e) {
e.printStackTrace();
}
}
/**
*取消mFilePathCallback回调
*/
private void cancelFilePathCallback() {
if (mUploadMessage != null) {
mUploadMessage.onReceiveValue(null);
mUploadMessage = null;
} else if (mUploadMessage != null) {
mUploadMessage.onReceiveValue(null);
mUploadMessage = null;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_webview);
web = (WebView) findViewById(R.id.WebView);
progressBar = (ProgressBar) findViewById(R.id.ProgressBar01);
web = new WebView(this);
web.getSettings().setJavaScriptEnabled(true);
web.loadUrl("http://uatcms.com/Sunshine/h5.html"); //需要家长的页面
web.setWebViewClient(new myWebClient());
web.setWebChromeClient(new WebChromeClient() {
// The undocumented magic method override
// Eclipse will swear at you if you try to put @Override here
// For Android 3.0+
public void openFileChooser(ValueCallback uploadMsg) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
MyWb.this.startActivityForResult(
Intent.createChooser(i, "File Chooser"),
FILECHOOSER_RESULTCODE);
}
// For Android 3.0+
public void openFileChooser(ValueCallback uploadMsg,
String acceptType) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("*/*");
MyWb.this.startActivityForResult(
Intent.createChooser(i, "File Browser"),
FILECHOOSER_RESULTCODE);
}
// For Android 4.1
public void showFileChooser(ValueCallback uploadMsg,
String acceptType, String capture) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
MyWb.this.startActivityForResult(
Intent.createChooser(i, "File Chooser"),
MyWb.FILECHOOSER_RESULTCODE);
}
@SuppressLint("NewApi")
@Override
public boolean onShowFileChooser(WebView webView,ValueCallback<Uri[]> filePathCallback,FileChooserParams fileChooserParams) {
// TODO Auto-generated method stub
super.onShowFileChooser(webView, filePathCallback, fileChooserParams);
mUploadMessage = filePathCallback;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
MyWb.this.startActivityForResult(
Intent.createChooser(i, "File Chooser"),
MyWb.FILECHOOSER_RESULTCODE);
return true;
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
if (newProgress == 100) {
// 网页加载完成
Toast.makeText(MyWb.this, "加载完成", Toast.LENGTH_SHORT).show();
} else {
// 加载中
Toast.makeText(MyWb.this, "加载中", Toast.LENGTH_SHORT).show();
}
}
});
setContentView(web);
}
public class myWebClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
progressBar.setVisibility(View.GONE);
}
@Override
public void onReceivedSslError(WebView view,
SslErrorHandler handler, SslError error) {
// TODO Auto-generated method stub
// handler.cancel();// Android默认的处理方式
handler.proceed();// 接受所有网站的证书
// handleMessage(Message msg);// 进行其他处理
}
}
// flipscreen not loading again
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
// To handle "Back" key press event for WebView to go back to previous
// screen.
/*
* @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if
* ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
* web.goBack(); return true; } return super.onKeyDown(keyCode, event); }
*/
}
如有疑问可以留言联系。
Android的页面上只需要放入一个webview就可以了;
package com.vlinker.webview;
import com.vlinker.vlife.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.net.Uri;
import android.net.http.SslError;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MyWb extends Activity {
/** Called when the activity is first created. */
WebView web;
ProgressBar progressBar;
private ValueCallback mUploadMessage;
private final static int FILECHOOSER_RESULTCODE = 1;
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
try {
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage)
return;
Uri result = intent == null || resultCode != RESULT_OK ? null: intent.getData();
if(result==null){
mUploadMessage.onReceiveValue(null);
}else{
mUploadMessage.onReceiveValue(new Uri[]{result});
}
mUploadMessage = null;
}
}catch (Exception e) {
e.printStackTrace();
}
}
/**
*取消mFilePathCallback回调
*/
private void cancelFilePathCallback() {
if (mUploadMessage != null) {
mUploadMessage.onReceiveValue(null);
mUploadMessage = null;
} else if (mUploadMessage != null) {
mUploadMessage.onReceiveValue(null);
mUploadMessage = null;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_webview);
web = (WebView) findViewById(R.id.WebView);
progressBar = (ProgressBar) findViewById(R.id.ProgressBar01);
web = new WebView(this);
web.getSettings().setJavaScriptEnabled(true);
web.loadUrl("http://uatcms.com/Sunshine/h5.html"); //需要家长的页面
web.setWebViewClient(new myWebClient());
web.setWebChromeClient(new WebChromeClient() {
// The undocumented magic method override
// Eclipse will swear at you if you try to put @Override here
// For Android 3.0+
public void openFileChooser(ValueCallback uploadMsg) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
MyWb.this.startActivityForResult(
Intent.createChooser(i, "File Chooser"),
FILECHOOSER_RESULTCODE);
}
// For Android 3.0+
public void openFileChooser(ValueCallback uploadMsg,
String acceptType) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("*/*");
MyWb.this.startActivityForResult(
Intent.createChooser(i, "File Browser"),
FILECHOOSER_RESULTCODE);
}
// For Android 4.1
public void showFileChooser(ValueCallback uploadMsg,
String acceptType, String capture) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
MyWb.this.startActivityForResult(
Intent.createChooser(i, "File Chooser"),
MyWb.FILECHOOSER_RESULTCODE);
}
@SuppressLint("NewApi")
@Override
public boolean onShowFileChooser(WebView webView,ValueCallback<Uri[]> filePathCallback,FileChooserParams fileChooserParams) {
// TODO Auto-generated method stub
super.onShowFileChooser(webView, filePathCallback, fileChooserParams);
mUploadMessage = filePathCallback;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
MyWb.this.startActivityForResult(
Intent.createChooser(i, "File Chooser"),
MyWb.FILECHOOSER_RESULTCODE);
return true;
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
if (newProgress == 100) {
// 网页加载完成
Toast.makeText(MyWb.this, "加载完成", Toast.LENGTH_SHORT).show();
} else {
// 加载中
Toast.makeText(MyWb.this, "加载中", Toast.LENGTH_SHORT).show();
}
}
});
setContentView(web);
}
public class myWebClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
progressBar.setVisibility(View.GONE);
}
@Override
public void onReceivedSslError(WebView view,
SslErrorHandler handler, SslError error) {
// TODO Auto-generated method stub
// handler.cancel();// Android默认的处理方式
handler.proceed();// 接受所有网站的证书
// handleMessage(Message msg);// 进行其他处理
}
}
// flipscreen not loading again
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
// To handle "Back" key press event for WebView to go back to previous
// screen.
/*
* @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if
* ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
* web.goBack(); return true; } return super.onKeyDown(keyCode, event); }
*/
}
如有疑问可以留言联系。
相关文章推荐
- Android开发笔记(一百五十二)H5通过WebView上传图片
- Android WebView 支持H5图片上传<input type="file">
- Android WebView-H5交互上传文件(包括图片)
- <android> webview与h5的交互——上传文件& 调起本地支付接口&响应原生dialog&back键层级返回
- android项目从零开始 Android webview支持 文件上传、图片上传
- 解决 react native 的 webview 组件不支持android客户端上传图片文件问题
- android Webview打开、上传本地图片的解决方案 支持到5.0
- Android WebView上传图片(base64)到H5(JS)
- Android webview h5 图片,拍照,视频上传
- Android Webview实现图片、文件上传及启动相机功能
- Android笔记:Webview 支持 input type=file选择上传图片
- Android Webview实现图片、文件上传及启动相机功能
- android 之 webView 显示h5 执行选择图片或者拍照功能
- android webview H5开发若干问题之问题四:webview打开原生应用
- [置顶] 【Android开发技巧】 关于Webview拍照或从相册上传图片处理总结
- Android WebView上传图片(base64)到H5(JS)
- WebView 支持上传图片
- android WebView 图片缩放功能小结
- 从手机获取图片让WebView支持本地上传图片
- android 附件(图片)上传下载功能开发