当前位置: 首页 > news >正文

苏州手机网站建设报价logo设计网站平台

苏州手机网站建设报价,logo设计网站平台,微信上可以做网站吗,在线做头像的网站在android开发中,用webview嵌套页面遇到的问题 在用android开发应用中,遇到一个场景,是需要用webview嵌套一个上传文件的页面,当时遇到两个问题: 选择文件的窗口没有弹出选中的文件和页面没有关联 针对第一个问题&…

在android开发中,用webview嵌套页面遇到的问题

  1. 在用android开发应用中,遇到一个场景,是需要用webview嵌套一个上传文件的页面,当时遇到两个问题:
  • 选择文件的窗口没有弹出
  • 选中的文件和页面没有关联
  1. 针对第一个问题,最开始我是只调用了webView.setWebViewClient(new WebViewClient());,此时页面能正常打开,但是点击选择文件的时候,没有反应,处理的方式是,需要设置webView.setWebChromeClient(new WebChromeClient() ),且需要重写WebChromeClient方法,不然,还是没有办法弹窗选择文件的窗口,下面是重写的方式,至此,第一个问题就可以解决了
webView.setWebChromeClient(new WebChromeClient() {@Overridepublic boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {GameSDKActivity.mFilePathCallback = filePathCallback;Intent intent = fileChooserParams.createIntent();try {mActivity.startActivityForResult(intent, GameSDKActivity.FILE_CHOOSER_REQUEST_CODE);} catch (ActivityNotFoundException e) {GameSDKActivity.mFilePathCallback = null;Toast.makeText(mActivity, "无法打开文件选择器", Toast.LENGTH_SHORT).show();return false;}return true;}});
  1. 针对第二个问题,是因为Activity的回调函数onActivityResult 没有针对的功能实现,因为在View中调用mActivity.startActivityForResult的时候,传入FILE_CHOOSER_REQUEST_CODE,所有在Activity中需要对requestCode为FILE_CHOOSER_REQUEST_CODE的结果进行处理,简单说明如下:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == FILE_CHOOSER_REQUEST_CODE) {// 业务处理}
}

详细代码如下

页面布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><WebViewandroid:id="@+id/webview"android:layout_width="match_parent"android:layout_height="match_parent"android:visibility="visible" /></LinearLayout>

View代码

private void showFileTrans() {Dialog dialog = new Dialog(mActivity);dialog.setContentView(R.layout.dialog_webview);dialog.setCancelable(true);dialog.setCanceledOnTouchOutside(true);// 设置对话框样式Window window = dialog.getWindow();if (window != null) {WindowManager.LayoutParams params = window.getAttributes();DisplayMetrics displayMetrics = new DisplayMetrics();window.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);int screenWidth = displayMetrics.widthPixels;int screenHeight = displayMetrics.heightPixels;int minWidth = (int) (280 * mActivity.getResources().getDisplayMetrics().density);int maxWidth = (int) (screenWidth * 0.8);int dialogWidth = Math.min(maxWidth, Math.max(minWidth, (int) (320 * mActivity.getResources().getDisplayMetrics().density)));params.width = dialogWidth;params.height = (int) (screenHeight * 0.8); // 推荐用80%屏高params.gravity = Gravity.CENTER;window.setAttributes(params);}WebView webView = dialog.findViewById(R.id.webview);WebSettings settings = webView.getSettings();settings.setJavaScriptEnabled(true);settings.setDomStorageEnabled(true);settings.setAllowFileAccess(true); // 关键:允许文件访问settings.setAllowContentAccess(true); // 关键:允许内容访问settings.setLoadWithOverviewMode(true);settings.setUseWideViewPort(true);settings.setBuiltInZoomControls(true);settings.setDisplayZoomControls(false);settings.setSupportZoom(true);settings.setDefaultTextEncodingName("utf-8");settings.setCacheMode(WebSettings.LOAD_DEFAULT);settings.setMediaPlaybackRequiresUserGesture(false);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);}webView.setWebViewClient(new WebViewClient());webView.setWebChromeClient(new WebChromeClient() {@Overridepublic boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {GameSDKActivity.mFilePathCallback = filePathCallback;Intent intent = fileChooserParams.createIntent();try {mActivity.startActivityForResult(intent, GameSDKActivity.FILE_CHOOSER_REQUEST_CODE);} catch (ActivityNotFoundException e) {GameSDKActivity.mFilePathCallback = null;Toast.makeText(mActivity, "无法打开文件选择器", Toast.LENGTH_SHORT).show();return false;}return true;}});webView.loadUrl("http://xxxxxxx");dialog.show();
}

Activity代码

public static ValueCallback<Uri[]> mFilePathCallback;
public static final int FILE_CHOOSER_REQUEST_CODE = 10001;@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == FILE_CHOOSER_REQUEST_CODE) {if (mFilePathCallback != null) {Uri[] results = null;if (resultCode == Activity.RESULT_OK) {if (data == null) {// 处理拍照等特殊情况Log.d("FileChooser", "data is null");} else {ClipData clipData = data.getClipData();if (clipData != null) {// 多选文件int count = clipData.getItemCount();results = new Uri[count];for (int i = 0; i < count; i++) {results[i] = clipData.getItemAt(i).getUri();Log.d("FileChooser", "Selected file: " + results[i]);}} else if (data.getData() != null) {// 单选文件results = new Uri[]{data.getData()};Log.d("FileChooser", "Selected file: " + results[0]);}}} else {// 用户取消选择Log.d("FileChooser", "User cancelled file selection");}mFilePathCallback.onReceiveValue(results);mFilePathCallback = null;}}}
http://www.dtcms.com/a/536695.html

相关文章:

  • 数据驱动AI落地:交通运维与仓储管理的智能化破局方法论与技术实践
  • 多功能雷达行为辨识与预测技术研究
  • Rust面试题及详细答案120道(115-120)-- 对比其他语言
  • LeetCode算法学习之移除元素
  • allWebPlugin中间件IE特别版发布
  • 前端八股之HTTP
  • rust笔记
  • 西安招聘网站建设多多鱼网页设计代码
  • 中国团队开发出有效的钙钛矿电池缓冲液
  • 使用mybatis-plus,实现将排序时,字段值为NULL的数据排在最后
  • Websocket两台服务器之间的通信
  • 网站技能培训班有哪些做网站用什么软件ps字体
  • 摩根大通将支持比特币和以太坊作为抵押品
  • 绿园区住房和城乡建设局网站c2c平台是什么意思
  • Web前端开发:用JavaScript阻止表单提交
  • 从 TCP 粘包到线程池:一起了解用 QRunnable 重构 Qt 高并发网络通信架构
  • Blender入门学习07 - 形态键
  • 网站推广常用方法包括二手车 东莞网站建设
  • LUMI 大模型分拣机器人应用 和 Lumi视觉标定
  • 开源项目分享:Gitee热榜项目 2025-10-27 日榜
  • [Dify 实战] 封闭插件开发到发布:本地编写、Remote调试与上线全流程(Python)
  • ARM《5》_系统移植(在开发板上运行linux程序)
  • 长沙网络营销公司排名郑州seo外包
  • 仿淘宝电商网站开发报价安徽网站开发培训价格
  • 关于Mysql的学习二(函数,约束与多表查询)
  • Milvus向量数据库介绍
  • 基于AI框架LangGraph对比Workflow模式与Agent模式
  • 哪个网站建设好网站建设的原则有哪些方面
  • 怎样给网站找空间做备案海南省住房和城乡建设部网站
  • 介绍如何借助淘宝/天猫的 API 接口,实现订单系统的自动同步