Abrufen des Pfads des aufgenommenen Bilds in Android mithilfe der Kameraabsicht
Lesezeit: 6 Minuten
Schubham
Ich habe versucht, den Pfad des aufgenommenen Bildes zu erhalten, um das Bild zu löschen. Habe viele Antworten auf StackOverflow gefunden, aber keine davon funktioniert für mich. Ich bekam folgende Antwort:
Dieser Code funktioniert im Samsung-Tab, aber nicht im Lenovo-Tab und im i-Ball-Tab. Kann mir also jemand helfen, eine andere Lösung zu finden, um dasselbe zu tun? Jede Hilfe wird geschätzt. Danke schön.
Die andere Methode komprimiert die Datei. Sie können die Größe anpassen, indem Sie die Zahl ändern 1000,1000
Android Camera Intent ist wie Intent Intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
– Schubham
2. Dezember 13 um 12:08 Uhr
wofür steht “mImageCaptureUri”??
– Dushyant Patel
12. April 14 um 0:40 Uhr
Der obige Code erstellt ein Miniaturbild. Wie kann ich ein Bild in voller Größe aus dem obigen Code erhalten?
– Nisar Ahmad
18. März 16 um 10:56 Uhr
MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, “data”, null); Diese Zeile gibt mir null
– cammando
15. Februar 17 um 10:25 Uhr
Der obige Code erstellt ein Miniaturbild @ArthurZhixinLiu
– Aamir Khan
4. Oktober 17 um 6:53 Uhr
dzikovskyy
Es gibt eine Lösung, um eine Datei zu erstellen (in einem externen Cache-Verzeichnis oder an einem anderen Ort) und den URI dieser Datei als zusätzliche Ausgabe für die Kameraabsicht zu speichern. Dadurch wird der Pfad definiert, in dem das aufgenommene Bild gespeichert wird.
Hier ist ein Beispiel:
File file;
Uri fileUri;
final int RC_TAKE_PHOTO = 1;
private void takePhoto() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
file = new File(getActivity().getExternalCacheDir(),
String.valueOf(System.currentTimeMillis()) + ".jpg");
fileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
getActivity().startActivityForResult(intent, RC_TAKE_PHOTO);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_TAKE_PHOTO && resultCode == RESULT_OK) {
//do whatever you need with taken photo using file or fileUri
}
}
}
Wenn Sie die Datei dann nicht mehr benötigen, können Sie sie mit löschen file.delete();
Übrigens werden Dateien aus dem Cache-Verzeichnis entfernt, wenn der Benutzer den App-Cache aus den App-Einstellungen löscht.
Versuchen Sie diese Methode, um den Pfad zu erhalten original Bild von der Kamera aufgenommen.
Diese Methode gibt den Pfad des letzten von der Kamera aufgenommenen Bildes zurück. Dieser Weg wäre also von Original Bild nicht von Miniaturansicht Bitmap.
Was ist, wenn kein externer Speicher vorhanden ist?
– cammando
15. Februar 17 um 11:41 Uhr
Ich bekomme damit sehr schlechte Qualität
– Jaroslaw Dukal
8. August 17 um 10:52 Uhr
Hier habe ich den Beispielcode in Kotlin aktualisiert. Bitte beachten Sie die Version Nougat und höher Uri.fromFile(file) funktioniert nicht und es stürzt die App ab, da FileProvider implementiert werden muss, was der sicherste Weg ist, Dateien von Absicht zu senden. Um dies zu implementieren, verweisen Sie auf diese Antwort oder diese Artikel
private fun takePhotoFromCamera() {
val isDeviceSupportCamera: Boolean = this.packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)
if (isDeviceSupportCamera) {
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
file = File(getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS + "/attachments")!!.path,
System.currentTimeMillis().toString() + ".jpg")
// fileUri = Uri.fromFile(file)
fileUri = FileProvider.getUriForFile(this, this.applicationContext.packageName + ".provider", file!!)
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri)
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
}
startActivityForResult(takePictureIntent, Constants.REQUEST_CODE_IMAGE_CAPTURE)
}
} else {
Toast.makeText(this, this.getString(R.string.camera_not_supported), Toast.LENGTH_SHORT).show()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK) {
if(requestCode == Constants.REQUEST_CODE_IMAGE_CAPTURE) {
realPath = file?.path
//do what ever you want to do
}
}
}