首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无法获取android webview以打开android 9上的文件选择器

基础概念

Android WebView 是一个用于在应用程序中显示网页的视图组件。它可以加载并显示来自互联网或本地存储的HTML内容。文件选择器是一个允许用户选择文件的应用程序组件。

问题原因

在Android 9(API级别28)及更高版本中,默认情况下,WebView 使用了更严格的文件访问策略,这可能导致无法直接打开文件选择器。

解决方法

1. 配置 android:usesCleartextTraffic

AndroidManifest.xml 文件中,确保你的应用允许使用明文流量:

代码语言:txt
复制
<application
    android:usesCleartextTraffic="true"
    ... >
    ...
</application>

2. 使用 Intent 打开文件选择器

你可以通过 Intent 手动打开文件选择器,并在用户选择文件后处理结果。以下是一个示例代码:

代码语言:txt
复制
// 在Activity中
public void openFileChooser() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("*/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
    startActivityForResult(Intent.createChooser(intent, "选择文件"), REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        if (data != null) {
            Uri uri = data.getData();
            // 处理选择的文件
        }
    }
}

3. 配置 WebChromeClient

在 WebView 中配置 WebChromeClient 以处理文件选择器请求:

代码语言:txt
复制
WebView webView = findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
        openFileChooser();
        return true;
    }
});

应用场景

这种方法适用于需要在 WebView 中处理文件上传的场景,例如用户需要上传图片或文档。

参考链接

通过以上方法,你应该能够在Android 9及更高版本中成功打开文件选择器。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

解决AndroidWebView无法打开PDF方案

其实安卓无法打开分以下几种情况:有.pdf后缀但是文档比较小——可以打开有.pdf后缀但是文档比较大——无法打开无.pdf后缀——都打不开原因分析 Android内置WebView引擎 主要用于显示网页内容和基本文本渲染...对于不具有.pdf后缀PDF文件WebView默认将其视为普通文本或二进制文件,因此无法直接预览 IOSWebView使用是 WebKit引擎 ,该引擎内置了对PDF文件支持, 可以直接预览和展示...所以IOSWebView可以打开带有.pdf后缀文件,并提供内置PDF查看器,使用户可以直接再应用中查看PDF文件。...对于没有.pdf后缀文件,IOS仍可以预览并打开,因为IOS系统预览功能会自动识别文件类型,并使用适当预览器打开文件 。...这些库可以在WebView中渲染和打开PDF文件。使用其他应用程序:(通过使用Inteynt机制?),可以调用系统中预装PDF阅读器应用程序或其他支持PDF应用程序来打开和预览PDF文件

3.7K40

【错误记录】Android WebView 报错 ( 网页无法打开 位于 http:... 网页无法加载, 因为 net::ERR_CLEARTEXT_NOT_PERMITTED )

一、错误记录 ---- 报错信息 : 网页无法打开 位于 http://… 网页无法加载, 因为 net::ERR_CLEARTEXT_NOT_PERMITTED ; 二、解决方案 ---- 在...Android 9.0 及以上系统版本中,系统默认情况下禁止应用程序使用不安全明文流量进行网络连接,提高用户安全性。...这意味着,如果应用程序尝试连接到一个不安全 HTTP 网站,将收到 net::ERR_CLEARTEXT_NOT_PERMITTED 错误 ; 也就是说应用中 WebView 尝试显示 HTTP 站点时就会报...net::ERR_CLEARTEXT_NOT_PERMITTED 错误 ; 解决方案一 在 AndroidManifest.xml 清单文件 application 节点配置 android:usesCleartextTraffic...="true" 属性 , 允许应用程序使用明文流量进行网络连接,该操作会降低应用程序安全性 ; <application android:usesCleartextTraffic="true

3.3K30
  • 解决Android Device Monitor File Explorer 中无法打开某些文件问题

    Android Device Monitor File Explorer 中,列出了模拟器内各种文件文件夹,有的文件夹旁边明明有箭头符号,然而却打不开,比如下面的 data 文件夹: ?...Android SDK 配置 把它设置为系统环境变量: ? 系统环境变量 并加入 path。 2、打开 cmd,输入以下命令,为 data 文件夹设置相应权限: ?...这时,我们再打开 Android Device Monitor File Explorer(会自动刷新),就可以正常打开 data 文件夹啦: ?...访问 data 文件夹 3 命令解析 adb shell :打开 adb shell 程序。 su :获取 root 权限。 chmod 权限 文件夹:为文件夹设置权限。...中无法打开某些文件问题文章就介绍到这了,更多相关android Device Monitor File Explorer 内容请搜索ZaLou.Cn以前文章或继续浏览下面的相关文章希望大家以后多多支持

    3K20

    【错误记录】Android WebView 报错 ( 网页无法打开 位于 baiduboxapp:speec... 网页无法加载, 因为 net::ERR_UNKNOW_URL_SCHEME )

    一、错误记录 报错信息 : 网页无法打开 位于 baiduboxapp://speech/startVoiceSearch?...¶ms={“voiceSource”:“home_naver_long”}&jumpTime 网页无法加载, 因为 net::ERR_UNKNOW_URL_SCHEME ; 二、解决方案 出现该错误原因是...WebView 尝试加载不支持 URL 链接 , 目前 WebView 只能支持加载 http 或 https 协议 URL 地址 ; 当前要加载地址是 " baiduboxapp://speech...函数 , 获取要加载 URL 地址 , 如果发现了要加载不支持 URL 协议地址 ,则启动对应应用加载该地址 , 如 百度 / 淘宝 / 京东 等应用 ; 解决方案 : 为 WebView 设置...URL 协议启动应用 在 AndroidManifest.xml 清单文件中注册一个自定义 URL 协议处理器 , 下面注册协议名称是 myapp ; <activity android:name

    3.3K10

    Appium—Native+H5混合APP自动化

    搜索了很多之后,有用资料不多,很多文章写很复杂,总结一下关键点只有两个。 第一、加载chrome驱动 在github找到手机native app中webview版本,并下载对应驱动。...安装完成后在chrome插件栏就有了Android小机器人图表,点击小机器人选择’View Inspection Targets’即可打开插件。 ?...此时还没有我们希望看到webview相关信息,这时候需要在手机上操作,打开“Native Android + H5”APP,然后就可以在Chrome 插件这个页面上看到需要信息了,这里需要记下来两个东西...: 其一是chrome版本,用来去github找到对应chrome“驱动”。...一般可能大多数人都是使用android id定位,android id可以根据UiautomaotorViewer等工具获取到,但是H5又不一样了,为什么呢。

    2K00

    Appium—Native+H5混合APP自动化

    搜索了很多之后,有用资料不多,很多文章写很复杂,总结一下关键点只有两个。 第一、加载chrome驱动 在github找到手机native app中webview版本,并下载对应驱动。...安装完成后在chrome插件栏就有了Android小机器人图表,点击小机器人选择’View Inspection Targets’即可打开插件。 ?...此时还没有我们希望看到webview相关信息,这时候需要在手机上操作,打开“Native Android + H5”APP,然后就可以在Chrome 插件这个页面上看到需要信息了,这里需要记下来两个东西...: 其一是chrome版本,用来去github找到对应chrome“驱动”。...一般可能大多数人都是使用android id定位,android id可以根据UiautomaotorViewer等工具获取到,但是H5又不一样了,为什么呢。

    1.5K20

    Android在项目中接入腾讯TBS浏览器WebView教程与注意地方

    点击了网页控件就可以回调上面的方法 在回调方法里面我们利用Intent打开文件选择器 然后选择完文件后在onActivityResult回调里面进行获取,然后利用ValueCallback<Uri 或者...WebView宽高获取 由于SDK WebView所提供WebView类,是对系统WebView聚合包装,所以:获取系统内核WebView或者 x5内核WebView宽高需要这样: webView.getView...4. 64位手机兼容 x5内核暂时不提供64位so文件,在64位手机上需要让AP32位模式运行。...,如果没有合适so可以到官网http://x5.tencent.com/tbs/sdk.html下载官网“SDK接入示例“,拷贝对应目录下liblbs.so文件),lib文件夹下不要有其他”armeabi...如果使用Android Studio: 1、打开对应module中build.gradle文件,在文件android{}中defaultConfig{}里(如果没有defaultConfig{

    4.2K20

    Android Intent漏洞

    通常有两种攻击操作: 通常导致读入任意文件 自定义操作,取决于应用程序实现产生不同漏洞 自定义操作 受害者应用代码:功能需要接受返回数据并在webview打开,接收返回码为1 startActivityForResult...-受害者应用打开攻击链接 系统操作 标准android操作 android.intent.action.PICK 选择图片 android.intent.action.GET_CONTENT 选择文件...用于获取用户选择文件(文档、图象、视频)URI,并在应用中进行处理(例如,将文件发送到服务器中),大多Android/Java无法Android ContentResolver返回InputSteam...任意文件读取 假设应用获取URI并将文件换从到外部目录(例如SD卡),易受攻击应用代码: protected void onCreate(Bundle savedInstanceState) {...任意文件写入 假设应用获取Content URI 并将文件从ContentProvider缓存到临时目录,则易受攻击应用: protected void onCreate(Bundle savedInstanceState

    59430

    首个hybird商业项目踩坑总结

    如果JS想要得到Android方法返回值,只能通过 WebView loadUrl ()去执行 JS 方法把返回值传递回去 WebView文件上传 当在网页里有文件上传组件时,我们惊奇发现...因为Android WebView是不能直接打开文件选择弹框。...接下来我讲简单提供一下解决方案,先说一下思路 接收WebView打开文件选择器通知,收到通知后,打开文件选择器等待用户选择需要上传文件 在onActivityResult中得到用户选择文件Uri...方法来通知我们,那我们就得重写了 需要注意是openFileChooser在不同Android版本是形参不同, private class ProgressWebChromeClient...现在流行有以下两种解决方案 独立进程法 独立进程法顾名思义是让包含WebViewAcitivyandroid:process=":web"形式指定单独进程,然后在需要退出时候使用System.exit

    1.2K10

    浅谈关于Android WebView上传文件解决方案

    我们在开发需求时候,难免会接入一下第三方H5页面,有些H5页面是具有上传照片功能,Android WebView是不能直接打开文件选择弹框 接下来我讲简单提供一下解决方案,先说一下思路...1.接收WebView打开文件选择器通知 2.收到通知后,打开文件选择器等待用户选择需要上传文件 3.在onActivityResult中得到用户选择文件Uri 4.然后把Uri传递给Html5...这样就完成了一次H5选择文件过程,下面我把代码贴出来自习看一下 首先,WebView必须要支持JS交互,所以要打开JS交互 mWebView.getSettings().setJavaScriptEnabled...(true); 当H5在调用上传文件Api时候,WebView会回调 openFileChooser和onShowFileChooser 方法来通知我们,我们这个时候要做就是重写这个方法 需要注意是这个方法在不同...,这个对象最后用来通知H5文件地址,我们之后在调用openFileChooser方法来打开文件选择器 private void openImageChooserActivity() { Intent

    3.7K41

    Android 使用腾讯X5内核, Webview浏览器拍照或从相册上传图片

    阅读文章需要几分钟,不妨早上听听歌 开启新一天!Go! ? ? 最近在项目开发中,需要使用WebView上传文件。默认情况下情况下,使用AndroidWebView是不能够支持上传文件。...我们可以根据acceptType,来打开系统或者我们自己创建文件选择器。当然如果需要打开相机拍照,也可以自己去使用打开相机拍照Intent去打开即可。...处理选择文件 因为我们前面是使用startActivityForResult来打开选择页面,我们会在onActivityResult中接收到选择结果。...2 选择文件会使用系统提供组件或者其他支持app,返回uri有的直接是文件url,有的是contentprovideruri,因此我们需要统一处理一下,转成文件uri,可参考以下代码(获取文件路径... 4 在打release包时候,因为我们会混淆,要特别设置不要混淆WebChromeClient子类里面的openFileChooser方法,由于不是继承方法,所以默认会被混淆,然后就无法选择文件

    2.1K30

    Appium自动化测试框架探索与实践

    移动原生应用指的是用iOS或者Android SDK写应用,对于Android用户是apk格式文件,对于iOS来说是ipa格式文件; 移动Web应用指的是移动端Web浏览器,它其实和PC端...应用UIAutomator Viewer获取元素信息 UIAutomator Viewer是Android SDK自带用来扫描和分析Android应用中UI控件工具。...应用Chrome 浏览器ADB插件获取元素信息 第1种方法适用于Android平台原生应用元素定位,那对于内嵌H5页面的混合应用采用何种方式定位元素比较方便呢?...’) CSS选择器作为H5元素定位方式之一,通过Chrome-inspect获取前端页面源码中HTML标签和CSS选择器,具体书写规范:如果一个a标签,class是“x1 y1”,需要写成“a.x1...前期准备工作(Android为例) Step1:安装Nodejs; Step2:JDK安装与配置; Step3:Android SDK安装; Step4:Eclipse

    2.8K20

    一起脱去小程序外套和内衣:微信小程序架构解析

    打开指定页面时,用默认数据直接渲染,请求数据回来时局部更新 返回显示历史View 退出小程序,View状态不销毁 4、小程序入口 扫码进入小程序 搜索小程序 小程序发送到桌面(Android) 发送给朋友...-避免被组件内结构破坏 wxss编译器:wcsc 把wxss文件转化为 js 执行方式: wcsc index.wxss 3、View – WXSS Selectors WXSS目前支持如下选择器:...事件绑定写法同组件属性, key、value 形式,key bind或catch开头,然后跟上事件类型,如bindtap, catchtouchstart,value 是一个字符串,需要在对应...可通过 getCurrentPages()) 获取当前页面栈,决定需要返回几层。 五、小程序开发经验 1、小程序存在问题 小程序仍然使用WebView渲染,并非原生渲染。...WXSS不支持级联选择器。 小程序无法打开页面,无法拉起APP。 小程序不能和公众号重名,于是小程序名字就成了:自选股+、滴滴出行DiDi 。

    10.3K64

    一起脱去小程序外套 - 微信小程序架构解析

    打开指定页面时,用默认数据直接渲染,请求数据回来时局部更新 返回显示历史View 退出小程序,View状态不销毁 4、小程序入口 扫码进入小程序 搜索小程序 小程序发送到桌面(Android) 发送给朋友...-避免被组件内结构破坏 wxss编译器:wcsc 把wxss文件转化为 js 执行方式: wcsc index.wxss 3、View – WXSS Selectors WXSS目前支持如下选择器:...事件绑定写法同组件属性, key、value 形式,key bind或catch开头,然后跟上事件类型,如bindtap, catchtouchstart,value 是一个字符串,需要在对应...可通过 getCurrentPages()) 获取当前页面栈,决定需要返回几层。...WXSS不支持级联选择器。 小程序无法打开页面,无法拉起APP。 小程序不能和公众号重名,于是小程序名字就成了:自选股+、滴滴出行DiDi 。

    1.9K30

    腾讯专家讲座|微信小程序架构解析!

    页面路径只能是五层 redirectTo(OBJECT) 关闭当前页面,跳转到应用内某个页面。 navigateBack(OBJECT) 关闭当前页面,返回一页面或多级页面。...可通过 getCurrentPages()) 获取当前页面栈,决定需要返回几层。 五、小程序开发经验 小程序可以借鉴优点 1、提前新建WebView,准备新页面渲染。...小程序存在问题 1、小程序仍然使用WebView渲染,并非原生渲染 2、需要独立开发,不能在非微信环境运行。 3、开发者不可以扩展新组件。...4、服务端接口返回无法执行,比如:Set-Cookie。 5、依赖浏览器环境js库不能使用,因为是JSCore执行,没有window、document对象。...6、WXSS中无法使用本地(图片、字体等)。 7、WXSS转化成js 而不是css,为了兼容rpx。 8、WXSS不支持级联选择器9、小程序无法打开页面,无法拉起APP。

    1.1K20

    Android WebView 上传文件支持全解析

    默认情况下情况下,使用AndroidWebView是不能够支持上传文件。而这个,也是在我们前端工程师告知之后才了解。...因为Android每个版本WebView实现有差异,因此需要对不同版本去适配。花了一点时间,参考别人代码,这个问题已经解决,这里把我踩过坑分享出来。...我们可以根据acceptType,来打开系统或者我们自己创建文件选择器。当然如果需要打开相机拍照,也可以自己去使用打开相机拍照Intent去打开即可。...处理选择文件 ---- 以上是打开响应选择文件界面,我们还需要处理接收到文件之后,传给网页来响应。...选择文件会使用系统提供组件或者其他支持app,返回uri有的直接是文件url,有的是contentprovideruri,因此我们需要统一处理一下,转成文件uri,可参考以下代码(获取文件路径

    63.1K273

    Android8.0、9.0、10.0、11.0新特性兼容适配代码修改

    ,而Android8和Android9众多新特性还涉及到其它代码适配,下面就补充列出Android8、Android9Android10额外兼容处理说明: Android8.0 1、属性动画组合...其它无法访问网络图片、无法打开网页、无法下载APK等问题,均可照此办理。或者直接把http换成https也行。...默认开启沙箱模式,即使已经动态申请了存储卡读写权限,在外部存储读写文件仍然失败。...3、Android11默认WebView不能访问存储卡网页 build.gradle中采用Android11编译时(targetSdkVersion 30),WebView无法访问存储卡网页文件...在Android10及以下版本,该值默认为true,但从Android11开始该值默认为false。 设置代码示例如下: // 设置是否允许访问文件,如WebView访问存储卡文件

    1.1K20

    自动化-Appium-​第一个Demo-混合(Python版)

    开发版(没有发布到App Store),只能获取.ipa应用程序文件,并且苹果开发者账号添加此真机UDID,才可以用命令安装到此真机上。...方式一:通过MacSafari 首先将模拟器应用程序打开,之后打开此应用显示Webview页面;之后打开MacSafari,选择开发--->模拟器,可以看到此时模拟器打开Webview页面...例如:模拟器 此时检测到模拟器打开Webview页面,例如苹果首页 选中后,鼠标右键点击转到…… 打开选中页面,将Chrome开发者工具打开,显示html源码信息,则可以获取相应Webview...方式一:通过MacSafari 首先将真机设备应用程序打开,之后打开此应用显示Webview页面;之后打开MacSafari,选择开发--->真机设备(如图:设备名为test),可以看到此时真机设备打开...例如:真机设备(test) 此时检测到真机设备打开Webview页面,例如:帮助中心页面 选中后,鼠标右键点击转到…… 打开选中页面,将Chrome开发者工具打开,显示html源码信息,则可以获取相应

    2.6K20
    领券