首页
学习
活动
专区
工具
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及更高版本中成功打开文件选择器。

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

相关·内容

解决Android的WebView无法打开PDF的方案

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

4K40

【错误记录】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.8K30
  • 【错误记录】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 ; android:name

    3.9K10

    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 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

    63530

    首个hybird商业项目踩坑总结

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

    1.2K10

    提升 WebView 用户体验的关键:Android WebChromeClient 解析

    在 Android 开发中,WebChromeClient 是 WebView 的一个重要组件,主要用于处理与网页相关的 UI 交互和事件。...文件选择相关:处理文件选择器的调用,确保良好的用户体验。 调试和历史记录相关:记录调试信息和获取用户访问历史,注意保护用户隐私。 数据库相关:管理 Web 应用程序的数据库配额,避免不必要的存储。...文件选择相关 openFileChooser 当需要打开文件选择器时调用。确保文件选择器的实现符合用户的预期,并处理好文件选择的结果。...onShowFileChooser 当需要显示文件选择器时调用。文件选择器的实现应支持多种文件类型,并提供良好的用户体验。...自定义文件选择:openFileChooser 和 onShowFileChooser 回调使得文件选择行为可定制。例如,打开自定义的文件选择器,或者限制用户只能选择特定类型的文件。

    12610

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

    阅读文章需要几分钟,不妨早上听听歌 开启新的一天!Go! ? ? 最近在项目开发中,需要使用WebView上传文件。默认情况下情况下,使用Android的WebView是不能够支持上传文件的。...我们可以根据acceptType,来打开系统的或者我们自己创建文件选择器。当然如果需要打开相机拍照,也可以自己去使用打开相机拍照的Intent去打开即可。...处理选择的文件 因为我们前面是使用startActivityForResult来打开的选择页面,我们会在onActivityResult中接收到选择的结果。...2 选择文件会使用系统提供的组件或者其他支持的app,返回的uri有的直接是文件的url,有的是contentprovider的uri,因此我们需要统一处理一下,转成文件的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

    3K20

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

    当打开指定页面时,用默认数据直接渲染,请求数据回来时局部更新 返回显示历史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.4K64

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

    当打开指定页面时,用默认数据直接渲染,请求数据回来时局部更新 返回显示历史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 。

    2.1K30

    Android WebView 上传文件支持全解析

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

    63.9K273

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

    页面路径只能是五层 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.2K20

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

    ,而Android8和Android9的众多新特性还涉及到其它的代码适配,下面就补充列出Android8、Android9、Android10的额外兼容处理说明: 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,才可以用命令安装到此真机上。...方式一:通过Mac上的Safari 首先将模拟器上的应用程序打开,之后打开此应用显示的Webview页面;之后打开Mac上的Safari,选择开发--->模拟器,可以看到此时模拟器打开的Webview页面...例如:模拟器 此时检测到模拟器上打开的Webview页面,例如苹果首页 选中后,鼠标右键点击转到…… 打开选中的页面,将Chrome的开发者工具打开,显示html源码信息,则可以获取相应的Webview...方式一:通过Mac上的Safari 首先将真机设备上的应用程序打开,之后打开此应用显示的Webview页面;之后打开Mac上的Safari,选择开发--->真机设备(如图:设备名为test),可以看到此时真机设备打开的...例如:真机设备(test) 此时检测到真机设备上打开的Webview页面,例如:帮助中心页面 选中后,鼠标右键点击转到…… 打开选中的页面,将Chrome的开发者工具打开,显示html源码信息,则可以获取相应的

    2.6K20

    WebView深度学习(一)之WebView的基本使用以及Android和js的交互

    WebView控件功能强大,除了具有一般View的属性和设置外,还可以对url请求、页面加载(直接使用html文件(网络上或本地assets中)作布局)、渲染Wb页面、页面交互(和js交互)进行强大的处理...步骤1:将需要调用的JS代码以.html格式放到 src/main/assets 文件夹里 需要加载JS代码:javascript.html 的JS代码以.html格式放到 src/main/assets 文件夹里 以下是需要加载JS代码:javascript.html 的Url协议 这里的示例用的是本地的html代码,放到src/main/assets文件夹里,文件名为javascript.html。开发中肯定是从服务器获取对应资源。 的示例用的是本地的html代码,放到src/main/assets文件夹里,文件名为javascript.html。开发中肯定是从服务器获取对应资源。 <!

    6.3K31

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

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

    2.6K30

    自动化-Appium-元素定位工具

    注意:当连接的设备是真机时,Chrome Inspect无法检测到Webview页面是怎么回事?...4、打开Mac上的Safari,选择开发--->设备(如图:设备名为test),可以看到此时真机设备打开的Webview页面,例如:帮帮应用的帮助中心页面。...2.2.2ios_webkit_debug_proxy 首先将真机设备上的应用程序打开,之后打开此应用显示的Webview页面; 之后在Mac上打开终端,输入启动代理命令 ios_webkit_debug_proxy...例如:真机设备(test) 此时检测到真机设备上打开的Webview页面,例如:帮助中心页面 选中后,鼠标右键点击转到…… 打开选中的页面,将Chrome的开发者工具打开,显示html源码信息,则可以获取相应的...ws=localhost:9223/devtools/page/1 打开Chrome新窗口,将复制的地址粘贴后访问 显示html源码信息,则可以获取相应的Webview元素信息。

    4.6K10
    领券