Laden Sie ein Bild von einer Kamera oder Galerie in WebView hoch
WebView in dieser App öffnet eine Seite mit Upload-Button.
Unten finden Sie den Codeblock, mit dem Sie ein Dialogfeld zum Hochladen von Bildern aus der Galerie oder Kamera öffnen können.
Innerhalb meiner Tätigkeit habe ich:
private WebView wv;
//make HTML upload button work in Webview
private ValueCallback<Uri> mUploadMessage;
private final static int FILECHOOSER_RESULTCODE=1;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if(requestCode==FILECHOOSER_RESULTCODE)
{
if (null == mUploadMessage) return;
Uri result = intent == null || resultCode != RESULT_OK ? null
: intent.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
}
}
Innerhalb von onCreate habe ich Folgendes:
wv.setWebChromeClient(new WebChromeClient() {
private Uri imageUri;
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType ) {
File imageStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyApp");
// Create the storage directory if it does not exist
if (! imageStorageDir.exists()){
imageStorageDir.mkdirs();
}
File file = new File(imageStorageDir + File.separator + "IMG_" + String.valueOf(System.currentTimeMillis()) + ".jpg");
imageUri = Uri.fromFile(file);
final List<Intent> cameraIntents = new ArrayList<Intent>();
final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
final PackageManager packageManager = getPackageManager();
final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
for(ResolveInfo res : listCam) {
final String packageName = res.activityInfo.packageName;
final Intent i = new Intent(captureIntent);
i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
i.setPackage(packageName);
i.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
cameraIntents.add(i);
}
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
Intent chooserIntent = Intent.createChooser(i,"Image Chooser");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{}));
MainActivity.this.startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);
}
Ich kann die Option für Kamera, Bildergalerie und Datei-Explorer sehen, wenn ich auf die Schaltfläche Hochladen klicke.
Datei-Explorer und Galerie funktionieren wie erwartet. Das Problem ist, dass wenn ich ein Bild mit einer Kamera aufnehme, es nicht in der Option "Datei auswählen" hochgeladen wird, die den Status "Keine Datei ausgewählt" anzeigt.
ZUR AUSWAHL DER KAMERA:
AUFNEHMEN VON SCHNAPPSCHÜSSEN MIT DER KAMERA: Zurück und die Optionen werden angezeigt.
ÜBER DIE WAHL DES CHECK-ZEICHENS:
DATEI WIRD NICHT HOCHGELADEN :( IN DER OPTION "DATEI AUSWÄHLEN"
WAS WIRD ERWARTET:
Ich habe überprüft, ob ich die richtige Schreibberechtigung habe, und daher wird ein Verzeichnis mit dem Namen "MyApp" erstellt und das Bild darin gespeichert (wenn Sie die Kamera aufrufen, nachdem Sie auf die Schaltfläche zum Hochladen auf der Webseite geklickt haben).
Wie kann die Anwendung programmgesteuert angewiesen werden, ein von der Kamera (die im MyApp-Verzeichnis gespeichert ist) aufgenommenes Bild auszuwählen, nachdem das Häkchen gedrückt wurde?