Android WebView 是一个用于在应用程序中显示网页的视图组件。它可以加载并显示来自互联网或本地存储的HTML内容。文件选择器是一个允许用户选择文件的应用程序组件。
在Android 9(API级别28)及更高版本中,默认情况下,WebView 使用了更严格的文件访问策略,这可能导致无法直接打开文件选择器。
android:usesCleartextTraffic
在 AndroidManifest.xml
文件中,确保你的应用允许使用明文流量:
<application
android:usesCleartextTraffic="true"
... >
...
</application>
Intent
打开文件选择器你可以通过 Intent
手动打开文件选择器,并在用户选择文件后处理结果。以下是一个示例代码:
// 在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();
// 处理选择的文件
}
}
}
WebChromeClient
在 WebView 中配置 WebChromeClient
以处理文件选择器请求:
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及更高版本中成功打开文件选择器。
领取专属 10元无门槛券
手把手带您无忧上云