android studio 中使用webview 调用相机和相册
时间: 2024-05-31 11:05:30 浏览: 172
在 Android Studio 中使用 WebView 调用相机和相册,需要使用 Android 系统提供的 WebChromeClient 和 WebViewClient 类。具体步骤如下:
1. 首先在 AndroidManifest.xml 文件中添加以下权限:
```xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
2. 在 Activity 中创建 WebView,并设置 WebChromeClient 和 WebViewClient:
```java
WebView webView = findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient() {
// 处理打开相机或相册的请求
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
// 创建打开相机或相册的 Intent
Intent intent = fileChooserParams.createIntent();
try {
// 启动 Intent
startActivityForResult(intent, REQUEST_CODE_FILE_CHOOSER);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
return false;
}
return true;
}
});
webView.setWebViewClient(new WebViewClient() {
// 处理网页加载完成事件
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 在网页中注入 JavaScript 代码,用于调用相机或相册
view.loadUrl("javascript: function chooseImage() {window.android.chooseImage();}");
}
});
```
3. 在 Activity 中重写 onActivityResult 方法,处理选择图片后的结果:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == REQUEST_CODE_FILE_CHOOSER) {
if (resultCode == RESULT_OK && data != null) {
// 获取选择的图片 Uri
Uri uri = data.getData();
if (uri != null) {
// 把 Uri 返回给网页
ValueCallback<Uri[]> filePathCallback = mFilePathCallback;
if (filePathCallback != null) {
filePathCallback.onReceiveValue(new Uri[]{uri});
mFilePathCallback = null;
}
}
} else {
// 如果选择图片失败,也要返回结果给网页
ValueCallback<Uri[]> filePathCallback = mFilePathCallback;
if (filePathCallback != null) {
filePathCallback.onReceiveValue(null);
mFilePathCallback = null;
}
}
}
}
```
4. 在 JavaScript 中调用 window.android.chooseImage() 方法,用于打开相机或相册并选择图片:
```javascript
function chooseImage() {
// 创建 input 元素,用于触发选择图片的操作
var input = document.createElement('input');
input.type = 'file';
input.accept = 'image/*';
input.onchange = function () {
// 把选择图片的结果返回给 Android
var uri = input.files;
if (uri) {
window.android.chooseImage(uri);
} else {
window.android.chooseImage(null);
}
};
// 触发点击 input 元素的操作,打开相机或相册
input.click();
}
```
以上就是在 Android Studio 中使用 WebView 调用相机和相册的基本步骤。如果您还有其他问题,请随时提出。
阅读全文