Es scheint, dass der Speicherort für Bilder nach der Aufnahme mit der Kamera je nach der vom dritten Anbieter bereitgestellten Kameraanwendung unterschiedlich ist. Daher ist es erforderlich, auf das Verhalten und den Inhalt des impliziten Parameters * Intent * zu achten. Bei * Android * Version 6.0 oder höher muss der Benutzer außerdem die Berechtigung überprüfen und die Autorisierung bestätigen, wenn die App zum ersten Mal gestartet wird.
In dieser Anwendung wird das Bild nach dem Bildschirmübergang eingefügt, nachdem ein Bild der Galerie im * Android * -Terminal aufgenommen oder ein Bild mit einer Kamera aufgenommen wurde.
Wenn Sie die Bildschirmauswahlschaltfläche in der * Intent * -Registrierung der beiden Funktionen (implizit * Intent * (Galeriefunktion) / implizit * Intent * (Kamerafunktion)) des Galeriebilds oder der Kameraaufnahme im * Android * -Terminal berühren Nur implizite * Absicht * (Galeriefunktion) wird nicht angezeigt. Implizite * Absicht * (Kamerafunktion) wird nicht angezeigt. Wenn Sie dagegen sofort abbrechen und die Schaltfläche zur Bildschirmauswahl erneut berühren, werden mehrere implizite * Absichten * (Galeriefunktion) angezeigt.
Es ist ein Fehler in der Reihenfolge der * Absicht * -Registrierung der beiden Funktionen von * Android * -Galeriebildern oder Kameraaufnahmen aufgetreten.
Registrierungsreihenfolge für implizite Absichten (Galeriefunktion / Kamerafunktion)
// .....Abkürzung
private fun addPhoto(requestCode: Int) {
getCameraIntent()
createChooserIntent()
// .....Abkürzung
}
// .....Abkürzung
Erstellen einer impliziten Absicht (Kamerafunktion)
// .....Abkürzung
private fun getCameraIntent() {
Intent(MediaStore.ACTION_IMAGE_CAPTURE)
// .....Abkürzung
}
// .....Abkürzung
Implizite Absicht (Galerie-Funktion) & Auswahlerstellung
// .....Abkürzung
private fun createChooserIntent(): Intent {
Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "image/*"
}
return Intent.createChooser(Streit).apply {
putExtra(Intent.EXTRA_INITIAL_INTENTS,Streit)
}
}
// .....Abkürzung
In dieser Anwendung wird nach Berühren der Bildschirmauswahlschaltfläche, um das Bild der Galerie oder der vom dritten Anbieter bereitgestellten Kameraanwendung auszuschließen und ein Bild mit der Kamera aufzunehmen, das Bild nach dem Bildschirmübergang eingefügt.
Da der Speicherort des aufgenommenen Bildes für die von einem dritten Anbieter bereitgestellte Kameraanwendung unbekannt ist, wird er unter Berücksichtigung des Grads des Einflusses von * Auswahl * ausgeschlossen.
Keiner
Erstellen Sie nach dem Erstellen einer impliziten * Absicht * (Kamerafunktion) eine neue implizite * Absicht * (Kamerafunktion), wenn diese mit dem Klassennamen der integrierten Kamerafunktion übereinstimmt.
Andere Kamera-Apps ausschließen
// .....Abkürzung
Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
val intentInfoList = context?.packageManager?.queryIntentActivities(this, 0) ?: return
//Da die Spezifikationen anderer Kamera-Apps nicht bekannt sind, wird nur die eingebaute Kamera als Ziel ausgewählt
for (intentInfo in intentInfoList) {
val packageName = intentInfo.activityInfo.packageName
val name = intentInfo.activityInfo.name
if (name.contains(CAMERA_CLS_NAME)) { // CAMERA_CLS_NAME → "com.android.camera"
Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
// .....Abkürzung
}
}
}
}
// .....Abkürzung
In dieser Anwendung wird nach Berühren der Bildschirmauswahlschaltfläche zum Aufnehmen eines Bilds der Galerie oder einer Kamera das Bild nach dem Bildschirmübergang eingefügt.
Nach dem Berühren der Bildauswahlschaltfläche, um ein Bild der Galerie oder der Kamera aufzunehmen, wird das Bild nicht in * ImageView * im Ziellayout des Bildschirmübergangs angezeigt, und der Bildschirm wird leer.
Beim Erstellen eines impliziten * Intent * (Kamerafunktion) mit * IntentChooser * ist der * Intent * -Parameter von * onActivityResult () * * null *, sofern * putExtra (MediaStore.EXTRA_OUTPUT, cameraUri) * nicht ausgeschlossen ist. , * Absicht * Kann * Uri * nicht von der Kamera aufnehmen lassen. (Verwenden Sie das implizite * Intent * -Beispiel aus der offiziellen Dokumentation.)
Erstellen Sie eine implizite * Absicht * (Kamerafunktion), indem Sie * putExtra (MediaStore.EXTRA_OUTPUT, cameraUri) * ausschließen.
putExtra()Ausschluss
// .....Abkürzung
Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
val intentInfoList = context?.packageManager?.queryIntentActivities(this, 0) ?: return
//Da die Spezifikationen anderer Kamera-Apps nicht bekannt sind, wird nur die eingebaute Kamera als Ziel ausgewählt
for (intentInfo in intentInfoList) {
val packageName = intentInfo.activityInfo.packageName
val name = intentInfo.activityInfo.name
if (name.contains(CAMERA_CLS_NAME)) { // CAMERA_CLS_NAME → "com.android.camera"
Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
// .....Abkürzung
// putExtra(MediaStore.EXTRA_OUTPUT, cameraUri)→ Ausschluss
}
}
}
}
// .....Abkürzung
Technische Ursachen und Gegenmaßnahmen für die erste Android-App und Kotlin-Sucht 1. Verarbeitung des Android-Bildschirmübergangs (Fragment) 3. Verarbeitung in Bezug auf Android-Bilder
Recommended Posts