[JAVA] Comment affiner le format d'image de la galerie sur Android, puis sélectionner et importer plusieurs images

J'ai décidé de développer une application Android au travail, et j'ai créé une fonction de capture d'image en utilisant quelque chose qui s'appelle Storage Access Framework, mais c'est un mémorandum car il y a peu de matériaux japonais et cela a pris du temps. Je suis désolé s'il y a une erreur car c'est le premier développement Android et il y a une période entre le développement et la synthèse du contenu.

environnement

・ Android 6.0.1

Comment appeler la galerie

Sur Android, il semble que l'intention soit utilisée lors de l'appel de diverses fonctions d'autres applications et de la norme Android.

Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 0);

En définissant "image / *" dans setType, seules les images peuvent être importées.

0 est défini dans le deuxième argument de startActivityForResult, mais ici nous définissons quelque chose appelé requestCode. Ceci est utilisé pour déterminer de quelle application ou fonction l'appel provient, et sera utilisé dans le processus de retour décrit ci-dessous. N'importe quelle valeur peut être utilisée tant qu'elle est int, mais lors de son implémentation, il est préférable d'en faire une constante afin que la même valeur puisse être utilisée pour l'appel et le retour.

Sélection multiple

Je n'aime pas sélectionner une par une, je vous permettra donc de sélectionner plusieurs images.

Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, 0);

Si vous ne souhaitez pas appeler d'applications supplémentaires

Si vous le laissez ci-dessus, vous pouvez également sélectionner des fichiers à partir de lecteurs réseau et d'autres applications. Dans ce cas, il est ennuyeux de toucher à des fonctions supplémentaires lors de la création du manuel d'utilisation, supprimez-le.

Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, 0);

Sélectionnez le format d'image

Je souhaite limiter les formats d'image pouvant être gérés, définissez donc les formats d'image pouvant être sélectionnés.

Lorsqu'il existe un format (par exemple, JPEG)

Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, 0);

Deux ou plus (les exemples sont JPEG et PNG)

Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/jpeg", "image/png"});
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, 0);

L'appel ressemble à ceci.

Traitement des retours de la galerie

À partir de là, il s'agit du traitement du côté de la réception. Si vous l'écrivez dans mainActivity, cela fonctionnera.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            Uri = uri;
            if (data.getData() != null) {
                //Traitement lorsque l'image sélectionnée est unique
                uri = data.getData();
            } else {
                //Traitement lorsqu'il y a plusieurs images sélectionnées
                ClipData cd = data.getClipData();
                for (int i=0; i<cd.getItemCount(); i++) {
                    uri = cd.getItemAt(i).getUri();
                }
            }
        }
    }
}

Le requestCode sera celui défini par startActivityForResult () de l'appelant. S'il y a un retour de plusieurs fonctions, modifiez le traitement de chaque fonction avec if ou swicht.

resultCode est le succès ou l'échec de l'appel.

Vous pouvez maintenant obtenir l'URI de l'image sélectionnée, alors n'hésitez pas à faire le reste.

Recommended Posts

Comment affiner le format d'image de la galerie sur Android, puis sélectionner et importer plusieurs images
Application Android qui sélectionne et affiche des images de la galerie
[Android] Comment activer / désactiver le panneau de notification à l'aide de StatusBarManager
[Android] Afficher les images et les caractères dans l'onglet ViewPager
[Android] Téléchargement d'images du terminal vers le serveur
Comment utiliser OpenCV 4 sur Android et afficher la vue en direct de la caméra
Maintenez l'image pratique et l'image essentielle pour lutter contre le TDD
Comment créer un formulaire pour sélectionner une date dans le calendrier
Comment désactiver Set-Cookie de l'API sur la face avant
Comment exécuter React et Rails sur le même serveur
Compressez et téléchargez plusieurs fichiers sur Firebase Storage sur Android.
Comment appliquer le format de code C à partir de la ligne de commande
Comment installer et configurer l'outil de surveillance "Graphite" sur Ubuntu
[Rails] N'utilisez pas la méthode de sélection uniquement pour réduire les colonnes!
[Java] Comment convertir du type String en type Path et obtenir le chemin
Comment "évider" une vue sur Android
[Java] Comment récupérer les paramètres passés du html côté serveur
[Android] Comment transmettre des images et recevoir des rappels lors du partage à l'aide de ShareCompat