在Android WebView中,要实现从相机拍摄图片并上传,可以通过以下步骤实现:
public class MyWebChromeClient extends WebChromeClient {
private ValueCallback mUploadCallback;
private final static int FILE_CHOOSER_RESULT_CODE = 1;
// For Android 5.0+
public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
if (mUploadCallback != null) {
mUploadCallback.onReceiveValue(null);
}
mUploadCallback = filePathCallback;
Intent intent = fileChooserParams.createIntent();
try {
startActivityForResult(intent, FILE_CHOOSER_RESULT_CODE);
} catch (ActivityNotFoundException e) {
mUploadCallback = null;
Toast.makeText(getContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show();
return false;
}
return true;
}
// For Android < 5.0
public void openFileChooser(ValueCallback uploadMsg) {
openFileChooser(uploadMsg, null);
}
// For Android 3.0+
public void openFileChooser(ValueCallback uploadMsg, String acceptType) {
openFileChooser(uploadMsg, acceptType, null);
}
// For Android 4.1+
public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) {
mUploadCallback = uploadMsg;
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(Intent.createChooser(intent, "File Chooser"), FILE_CHOOSER_RESULT_CODE);
}
// Handle the file chooser result
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == FILE_CHOOSER_RESULT_CODE) {
if (resultCode == Activity.RESULT_OK && mUploadCallback != null) {
Uri[] result = null;
if (data != null) {
String dataString = data.getDataString();
if (dataString != null) {
result = new Uri[]{Uri.parse(dataString)};
}
}
mUploadCallback.onReceiveValue(result);
} else {
mUploadCallback.onReceiveValue(null);
}
mUploadCallback = null;
}
}
}
WebView webView = findViewById(R.id.webView);
webView.setWebChromeClient(new MyWebChromeClient());
现在,当用户点击上传按钮时,会弹出文件选择对话框,用户可以选择拍摄照片并上传。
注意:在AndroidManifest.xml文件中需要添加相机和存储权限。