When clicking an Input File button on webview,
we want to take a picture from camera and place the image to that input.
1. Declare instance variables
private final static int CAPTURE_RESULTCODE = 1;
private ValueCallback<Uri> mUploadMessage;
private String filePath;
2. Set custom webChromeClient to WebView
myWebView.setWebChromeClient(new WebChromeClient() {
@SuppressWarnings("unused")
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
openFileChooser(uploadMsg);
}
@SuppressWarnings("unused")
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
openFileChooser(uploadMsg);
}
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
this.mUploadMessage = uploadMsg;
File imageStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "appName");
this.filePath = imageStorageDir + File.separator + "IMG_" + String.valueOf(System.currentTimeMillis()) + ".jpg";
File file = new File(this.filePath);
Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
MainActivity.this.startActivityForResult(captureIntent, CAPTURE_RESULTCODE);
}
});
3. Apply onActivityResult to handle the picture after capture
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == CAPTURE_RESULTCODE) {
if (null == this.mUploadMessage || (resultCode != RESULT_OK && !new File(filePath).exists())) {
this.mUploadMessage.onReceiveValue(null);
} else {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, this.filePath);
this.mUploadMessage.onReceiveValue(this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values));
}
this.mUploadMessage = null;
}
}
New to android and just curious as to how or where to put the onActivityResult portion of the code?
I tried to put it in a few different places and kept getting errors. Any help would be great as I try and get finish getting a mobile app up and running.
Just put it under your Activity.
Is there a way to add the feature of selecting from the gallery or the camera? and thank you for the help with the onActivity portion of the code as a newbie to android programming I really appreciate it.
System.currentTimeMillis() should not used with String.valueOf
System can not get a correct path and the camera can not save come out by press ‘confirm’ because image output failed.
You may see that the file path is correct but no effect and no error message when you press ‘tick’
PS: Nexus 5
It works for me, I am using Sony Xperia Z1, I will study it tomorrow.
unfortunately it seems, that Android KitKat 4.4 broke openFileChooser – see this bug report:
https://code.google.com/p/android/issues/detail?id=62220
demo please