Ich entwickle eine App, die eine WebView
verwendet, um auf einige Logik zuzugreifen. Die Logik, hat einen Teil, wo der Benutzer ein Bild hochladen kann, aber ich kann nicht scheinen, einen Weg für die App zu finden, dies zu tun.
Der Code, den ich als Beispiel verwende, ist in diesem link.Android Datei-Wähler öffnet nicht von WebView in Lollipop noch Marshmallow
Wie Sie sehen werden, wird eine benutzerdefinierte Intent
von der WebChromeClient
festgelegt, jedoch öffnet die Dateiauswahl überhaupt nicht. Code:
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType){
// Update message
mUploadMessage = uploadMsg;
try{
// Create AndroidExampleFolder at sdcard
File imageStorageDir = new File(
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES)
, "AndroidExampleFolder");
if (!imageStorageDir.exists()) {
// Create AndroidExampleFolder at sdcard
imageStorageDir.mkdirs();
}
// Create camera captured image file path and name
File file = new File(
imageStorageDir + File.separator + "IMG_"
+ String.valueOf(System.currentTimeMillis())
+ ".jpg");
mCapturedImageURI = Uri.fromFile(file);
// Camera capture image intent
final Intent captureIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
// Create file chooser intent
Intent chooserIntent = Intent.createChooser(i, "Image Chooser");
// Set camera intent to file chooser
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS
, new Parcelable[] { captureIntent });
// On select image call onActivityResult method of activity
startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);
}
catch(Exception e){
Toast.makeText(getBaseContext(), "Exception:"+e,
Toast.LENGTH_LONG).show();
}
}
Vielen Dank im Voraus!
EDIT
So, nach @JoxTraex mich erleuchtet, erkannte ich, dass die Dateiauswahl war nicht Auslösung, weil ich keine Methoden des WebChromeClient
überschrieben wurde. Jetzt fragt der Dateiwähler, aber wenn ein Bild ausgewählt wird, wird das Bild nicht hochgeladen.
Der Code, den ich für die Dateiauswahl bin mit:
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
openFileChooser(filePathCallback, "");
return super.onShowFileChooser(webView, filePathCallback, fileChooserParams);
}
public void openFileChooser(ValueCallback<Uri[]> uploadMsg, String acceptType){
// Update message
//mUploadMessage = uploadMsg.this;
try{
// Create AndroidExampleFolder at sdcard
File imageStorageDir = new File(
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES)
, "AndroidExampleFolder");
if (!imageStorageDir.exists()) {
// Create AndroidExampleFolder at sdcard
imageStorageDir.mkdirs();
}
// Create camera captured image file path and name
File file = new File(
imageStorageDir + File.separator + "IMG_"
+ String.valueOf(System.currentTimeMillis())
+ ".jpg");
mCapturedImageURI = Uri.fromFile(file);
// Camera capture image intent
final Intent captureIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
// Create file chooser intent
Intent chooserIntent = Intent.createChooser(i, "Image Chooser");
// Set camera intent to file chooser
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS
, new Parcelable[] { captureIntent });
// On select image call onActivityResult method of activity
startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);
}
catch(Exception e){
Toast.makeText(getBaseContext(), "Exception:"+e,
Toast.LENGTH_LONG).show();
}
}
Vielen Dank im Voraus!
Sind Sie sicher, dass eine App tatsächlich mit dieser bestimmten Absicht umgehen kann? – JoxTraex
@JoxTraex Ich habe der Manifest-Datei einige Berechtigungen hinzugefügt, wie zum Beispiel das Internet, externen Speicher lesen, Kamera – pamobo0609
Ich weiß nicht, ob Sie einen Broadcast-Empfänger deklarieren wollen – pamobo0609