feat: 添加文件选择和相机拍照功能

主要功能:
1. 支持WebView中选择文件(任意类型)
2. 支持选择图片(相册+相机)
3. 支持直接调用相机拍照
4. 自动处理相机和存储权限请求

新增文件:
- FileChooserHelper.java - 文件选择和相机功能核心工具类
- CameraHelper.java - 直接调用相机的JavaScript接口
- FileTestActivity.java - 文件选择测试Activity
- file_paths.xml - FileProvider配置文件
- file_test.html - 功能测试页面(ES5语法兼容老版本)
- INTEGRATION_GUIDE.md - 接入指南文档
- FILE_CHOOSER_USAGE.md - 详细使用文档

修改文件:
- AndroidManifest.xml - 添加相机和存储权限,注册FileProvider和FileTestActivity
- MainActivity.java - 集成FileChooserHelper,添加WebChromeClient支持文件选择
- menu_main.xml - 添加"文件测试"菜单项
- strings.xml - 添加相关字符串资源

技术特性:
- 支持Android 9+(API 28+)
- 适配Android 10+分区存储
- 适配Android 13+新媒体权限
- 权限授予后自动重新打开文件选择器
- 使用ES5语法兼容老版本WebView
- 支持FileProvider安全文件共享

使用方式:
在WebView加载的HTML页面中使用标准input标签:
<input type="file" accept="image/*" capture="environment">

版本:2.15
This commit is contained in:
yao-1212
2026-01-23 17:23:47 +08:00
parent b9897fa0c6
commit 210d599ce0
11 changed files with 876 additions and 1 deletions

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webViewFileTest"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>

View File

@ -14,4 +14,10 @@
android:orderInCategory="100"
app:showAsAction="never" />
<item
android:id="@+id/action_file_test"
android:title="@string/action_file_test"
android:orderInCategory="100"
app:showAsAction="never" />
</menu>

View File

@ -4,6 +4,8 @@
<string name="title_activity_setting_network">网络设置界面</string>
<string name="action_setting_voice">语音设置</string>
<string name="title_activity_setting_voice">语音设置界面</string>
<string name="action_file_test">文件测试</string>
<string name="title_activity_file_test">文件选择测试</string>
<string name="title_activity_main">主页</string>
<!-- 讯飞离线语音appid-->

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="." />
<external-cache-path name="external_cache" path="." />
<cache-path name="cache" path="." />
<files-path name="files" path="." />
</paths>