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.
・ Android 6.0.1
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.
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 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);
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.
À 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