android4.4 webview不支持上传图片openFileChooser()不被调用

gamelose 2014-07-09 09:03:41
加精
android4.4 webview不支持上传图片openFileChooser()不被调用
...全文
21453 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
TheMostBeautiful 2016-10-21
  • 打赏
  • 举报
回复
引用 33 楼 bxjxxyy 的回复:
[quote=引用 32 楼 bxjxxyy 的回复:] 同问4.4的怎么办。我也是4.4的openfilechooser不起作用。5.0的是根据上面说的那个实现了。但是4.4的用户还是很多的,不能扔了啊
补充一下,uc,qq,微信浏览器是如何实现上传图片的?这些浏览器访问的网站什么都有,不可能挨个JS适配调用本地方法上传的啊[/quote] 你好,发现一个问题,跳到系统相册的时候 不选这图片 点击back键之后就无法打开系统相册了
st666 2016-09-01
  • 打赏
  • 举报
回复
我有办法 重写此方法 app内嵌H5调用摄像头测试通过了 附件是app显示h5的内容 可以调用摄像头的小例子 实现过程基本是这样 h5中调用摄像头的代码是: <input accept="image/*" capture="camera" id="imgFile" name="imgFile" type="file"> 用安卓的 webView 控件来显示h5网页 然后给webView 设置WebChromeClient WebChromeClient 主要处理解析,渲染网页等浏览器做的事情 设置完毕后 重写WebChromeClient 的openFileChooser方法即可实现h5调用手机摄像头了。 activity_main01.xml 如下 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <WebView android:id="@+id/webView01" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true"/> </RelativeLayout> 代码如下 package com.example.webview01; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.util.Log; import android.view.Menu; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; /** * 可以选择文件上传图片 * @author Administrator * */ public class MainActivity01 extends FragmentActivity { private WebView webView; private static final int FILE_SELECT_CODE = 0; private ValueCallback<Uri> mUploadMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main01); webView=(WebView)findViewById(R.id.webView01); //设置webView相关属性和方法 WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setBuiltInZoomControls(true); webView.loadUrl("http://www.baidu.com"); webView.setWebViewClient(new MyWebViewClient(this)); webView.setWebChromeClient(new MyWebChromeClient()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private class MyWebChromeClient extends WebChromeClient { // For Android 3.0+ public void openFileChooser(ValueCallback<Uri> uploadMsg) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, "File Chooser"), FILE_SELECT_CODE); } // 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("*/*"); startActivityForResult(Intent.createChooser(i, "File Browser"), FILE_SELECT_CODE); } // For Android 4.1 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, "File Chooser"), FILE_SELECT_CODE); } } private class MyWebViewClient extends WebViewClient { private Context context; public MyWebViewClient(Context context) { super(); this.context = context; } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) { return; } switch (requestCode) { case FILE_SELECT_CODE : { Uri uri = data.getData(); Log.e("Tag", "Path:" + uri.toString()); mUploadMessage.onReceiveValue(uri); mUploadMessage = null; } break; } } }
bxjxxyy 2016-07-15
  • 打赏
  • 举报
回复
引用 32 楼 bxjxxyy 的回复:
同问4.4的怎么办。我也是4.4的openfilechooser不起作用。5.0的是根据上面说的那个实现了。但是4.4的用户还是很多的,不能扔了啊
补充一下,uc,qq,微信浏览器是如何实现上传图片的?这些浏览器访问的网站什么都有,不可能挨个JS适配调用本地方法上传的啊
bxjxxyy 2016-07-15
  • 打赏
  • 举报
回复
同问4.4的怎么办。我也是4.4的openfilechooser不起作用。5.0的是根据上面说的那个实现了。但是4.4的用户还是很多的,不能扔了啊
qq_34818426 2016-04-28
  • 打赏
  • 举报
回复
aihiwuhi y iusadghf
sinat_34207627 2016-04-26
  • 打赏
  • 举报
回复
学习学习怎么解决
cattpon 2016-04-22
  • 打赏
  • 举报
回复
没遇到过这样的问题~
nettman 2016-04-22
  • 打赏
  • 举报
回复
qq_26550327 2016-04-21
  • 打赏
  • 举报
回复
厉害哦厉害哦厉害哦
qq_1021540607 2016-04-21
  • 打赏
  • 举报
回复
福临天下 2016-04-20
  • 打赏
  • 举报
回复
求4.4的方法啊 http://stackoverflow.com/questions/5907369/file-upload-in-webview/ 这个不行啊
jiazhuo_063 2016-04-20
  • 打赏
  • 举报
回复
高深啊 学习了
christ 2016-01-29
  • 打赏
  • 举报
回复
17楼 19楼的方法5.0可用 4.4没找到办法 // For Lollipop 5.0+ Devices public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { if (uploadMessage != null) { uploadMessage.onReceiveValue(null); uploadMessage = null; } uploadMessage = filePathCallback; Intent intent = fileChooserParams.createIntent(); try { startActivityForResult(intent, REQUEST_SELECT_FILE); } catch (ActivityNotFoundException e) { uploadMessage = null; Toast.makeText(getActivity().getApplicationContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show(); return false; } return true; }
义虎 2015-12-30
  • 打赏
  • 举报
回复
对我很有用的
weiliying 2015-12-29
  • 打赏
  • 举报
回复
引用 17 楼 caoliang1021 的回复:
android WebView 4.4以上系统调用摄像头 参考这篇文章 http://stackoverflow.com/questions/5907369/file-upload-in-webview/
大家看这个,5.0的,我就用了他的方法!!
Fioogle 2015-12-21
  • 打赏
  • 举报
回复
// 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/*"); startActivityForResult(Intent.createChooser(intent, "完成操作需要使用"), WebviewActivity.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/*"); startActivityForResult(Intent.createChooser(intent, "完成操作需要使用"), WebviewActivity.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/*"); startActivityForResult(Intent.createChooser(intent, "完成操作需要使用"), WebviewActivity.FILECHOOSER_RESULTCODE); } @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; } }
caoliang1021 2015-12-02
  • 打赏
  • 举报
回复
android WebView 4.4以上系统调用摄像头 参考这篇文章 http://stackoverflow.com/questions/5907369/file-upload-in-webview/
xiaoyang880803 2015-10-12
  • 打赏
  • 举报
回复
openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) 4.1以上是调用这个方法的。要在WebChromeClient重写这个方法。
米悠悠 2015-06-16
  • 打赏
  • 举报
回复
4.4怎么办?系统的就能行,系统不是用的openFileChooser吗?
JasmineChoi 2015-05-22
  • 打赏
  • 举报
回复
同求啊,自己写的代码能调用安卓webview的摄像头了,但是拍完照读取不了Java返回的file文件额
加载更多回复(13)

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧