Il semble que l'emplacement de stockage de l'image après la prise de vue avec l'appareil photo diffère en fonction de l'application de l'appareil photo fournie par le troisième fournisseur, il est donc nécessaire de faire attention au comportement et au contenu du paramètre implicite * Intent *. De plus, * Android * version 6.0 ou ultérieure exigera que l'utilisateur vérifie l'autorité et confirme l'autorisation lors du premier démarrage de l'application.
Dans cette application, après avoir pris une photo de la galerie dans le terminal * Android * ou pris une photo avec un appareil photo, l'image est collée après la transition d'écran.
Lorsque vous touchez le bouton de sélection d'écran dans l'enregistrement * Intent * des deux fonctions (implicite * Intent * (fonction de galerie) / implicite * Intent * (fonction de caméra)) de l'image de la galerie ou de la prise de vue de la caméra dans le terminal * Android * Seule * Intent * implicite (fonction de galerie) n'est pas affichée. * Intent * implicite * (fonction de caméra) n'est pas affichée. D'un autre côté, si vous annulez immédiatement et touchez à nouveau le bouton de sélection d'écran, plusieurs * Intent * implicites (fonction de galerie) seront affichés.
Une erreur s'est produite dans l'ordre d'enregistrement * Intention * des deux fonctions de l'image de la galerie * Android * ou de la prise de vue avec l'appareil photo.
L'enregistrement * Intent * de deux fonctions (implicite * Intent * (fonction de galerie) / implicite * Intent * (fonction de caméra)) est dans l'ordre suivant. ① Création * Intent * implicite (fonction caméra) ② Création * Intent * implicite (fonction de galerie) ③ Créer * Sélecteur *
Ordre d'enregistrement des intentions implicites (fonction de galerie / fonction de caméra)
// .....Abréviation
private fun addPhoto(requestCode: Int) {
getCameraIntent()
createChooserIntent()
// .....Abréviation
}
// .....Abréviation
Création d'une intention implicite (fonction de caméra)
// .....Abréviation
private fun getCameraIntent() {
Intent(MediaStore.ACTION_IMAGE_CAPTURE)
// .....Abréviation
}
// .....Abréviation
Intention implicite (fonction Galerie) et création de sélecteur
// .....Abréviation
private fun createChooserIntent(): Intent {
Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "image/*"
}
return Intent.createChooser(argument).apply {
putExtra(Intent.EXTRA_INITIAL_INTENTS,argument)
}
}
// .....Abréviation
Dans cette application, après avoir touché le bouton de sélection d'écran pour exclure l'image de la galerie ou de l'application appareil photo fournie par le troisième fournisseur et avoir pris une photo avec l'appareil photo, l'image d'image est collée après la transition d'écran.
Étant donné que l'emplacement de stockage de l'image capturée est inconnu pour l'application de caméra fournie par un fournisseur tiers, il est exclu du * Sélecteur * en raison du degré d'influence.
Aucun
Après avoir créé une * Intent * implicite (fonction de caméra), créez une nouvelle * Intent * implicite (fonction de caméra) si elle correspond au nom de classe de la fonction de caméra intégrée.
Exclure les autres applications de caméra
// .....Abréviation
Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
val intentInfoList = context?.packageManager?.queryIntentActivities(this, 0) ?: return
//Étant donné que les spécifications des autres applications de caméra sont inconnues, seule la caméra intégrée est ciblée
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 {
// .....Abréviation
}
}
}
}
// .....Abréviation
Dans cette application, après avoir touché le bouton de sélection d'écran pour prendre une photo de la galerie ou d'un appareil photo, l'image de l'image est collée après la transition d'écran.
Après avoir touché le bouton de sélection d'image pour prendre une photo de la galerie ou de l'appareil photo, l'image de l'image n'est pas affichée dans * ImageView * sur la disposition de destination de transition d'écran, et l'écran devient vide.
Lors de la création d'un * Intent * implicite (fonction de caméra) avec * IntentChooser *, le paramètre * Intent * de * onActivityResult () * sera * null * sauf si * putExtra (MediaStore.EXTRA_OUTPUT, cameraUri) * est exclu. , * Intent * Impossible d'obtenir * Uri * pris par l'appareil photo. (Utilisez l'exemple implicite * Intent * de la documentation officielle)
Créez une * Intent * implicite (fonction de caméra) en excluant * putExtra (MediaStore.EXTRA_OUTPUT, cameraUri) *.
putExtra()Exclusion
// .....Abréviation
Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
val intentInfoList = context?.packageManager?.queryIntentActivities(this, 0) ?: return
//Étant donné que les spécifications des autres applications de caméra sont inconnues, seule la caméra intégrée est ciblée
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 {
// .....Abréviation
// putExtra(MediaStore.EXTRA_OUTPUT, cameraUri)→ Exclusion
}
}
}
}
// .....Abréviation
Causes techniques et contre-mesures pour la première application Android et la dépendance à Kotlin 1. Traitement de la transition d'écran Android (fragment) 3. Traitement lié aux images Android
Recommended Posts