android项目从零开始 Android webview支持 文件上传、图片上传
来源:互联网 发布:t6软件是什么 编辑:程序博客网 时间:2024/05/17 05:56
项目中用webview包裹网站,出现上传文件无反应的情况,之前了解过文件上传。现在的前端页面需要处理的是
1.打开本地文件选择器
2.用户选择需要上传的文件
3.处理用户选择的文件通知webview
4.前端提交表单上传文件
首先需要webview 对 JS 的支持
webview.getSettings().setJavaScriptEnable(true)
前端页面针对不同版本的android系统 webview内核会有不同,调用方法不一致
webview.setWebChromeClient(new WebChromeClient() { // For Android < 3.0 public void openFileChooser(ValueCallback<Uri> valueCallback) { *** } // For Android >= 3.0 public void openFileChooser(ValueCallback valueCallback, String acceptType) { *** } //For Android >= 4.1 public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType, String capture) { *** } // For Android >= 5.0 @Override public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { *** return true; } });
完整代码
public class MainActivity extends AppCompatActivity { private ValueCallback<Uri> uploadMessage; private ValueCallback<Uri[]> uploadMessageAboveL; private final static int FILE_CHOOSER_RESULT_CODE = 10000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView webview = (WebView) findViewById(R.id.web_view); assert webview != null; WebSettings settings = webview.getSettings(); settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setJavaScriptEnabled(true); webview.setWebChromeClient(new WebChromeClient() { // For Android < 3.0 public void openFileChooser(ValueCallback<Uri> valueCallback) { uploadMessage = valueCallback; openImageChooserActivity(); } // For Android >= 3.0 public void openFileChooser(ValueCallback valueCallback, String acceptType) { uploadMessage = valueCallback; openImageChooserActivity(); } //For Android >= 4.1 public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType, String capture) { uploadMessage = valueCallback; openImageChooserActivity(); } // For Android >= 5.0 @Override public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { uploadMessageAboveL = filePathCallback; openImageChooserActivity(); return true; } }); String targetUrl = "file:///android_asset/up.html"; webview.loadUrl(targetUrl); } private void openImageChooserActivity() { Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == FILE_CHOOSER_RESULT_CODE) { if (null == uploadMessage && null == uploadMessageAboveL) return; Uri result = data == null || resultCode != RESULT_OK ? null : data.getData(); if (uploadMessageAboveL != null) { onActivityResultAboveL(requestCode, resultCode, data); } else if (uploadMessage != null) { uploadMessage.onReceiveValue(result); uploadMessage = null; } } } @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) { if (requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL == null) return; Uri[] results = null; if (resultCode == Activity.RESULT_OK) { if (intent != null) { String dataString = intent.getDataString(); ClipData clipData = intent.getClipData(); if (clipData != null) { results = new Uri[clipData.getItemCount()]; for (int i = 0; i < clipData.getItemCount(); i++) { ClipData.Item item = clipData.getItemAt(i); results[i] = item.getUri(); } } if (dataString != null) results = new Uri[]{Uri.parse(dataString)}; } } uploadMessageAboveL.onReceiveValue(results); uploadMessageAboveL = null; }}
阅读全文
0 0
- android项目从零开始 Android webview支持 文件上传、图片上传
- android 支持WebView上传文件
- Android的webView支持文件上传
- Android webview支持页面中的文件上传
- Android WebView 上传文件支持全解析
- Android WebView 上传图片
- Android WebView关于图片/文件上传
- android使用webview上传文件(图片)
- Android WebView 上传图片文件有坑
- android webview 弹出图片选择器上传文件
- android webview上传文件
- Android WebView 文件上传
- android webview上传文件
- WebView 支持上传图片
- Android WebView 支持H5图片上传<input type="file">
- Android Webview upload 图片上传
- android webview中上传图片
- 让Android中的webview支持页面中的文件上传
- 将数据中心添加到集群(二)
- 【Java】读取xml文件字段值
- javascript根据已知两个日期,获得两个日期之间的所有数据
- 移动端布局
- Windows Server 2012 R2配置Tomcat服务器以及文件部署
- android项目从零开始 Android webview支持 文件上传、图片上传
- 学习Hadoop第三课(Hadoop安装与配置)
- 学习笔记—HTML(4)
- 扩展的欧几里得算法forJava
- hadoop
- JAVA面试题(线程)
- 编程基本功训练:流程图画法及练习
- Jmeter正则表达式
- Android中Fragment的解析