Ich habe mich entschlossen, eine Android-Anwendung bei der Arbeit zu entwickeln, und eine Bilderfassungsfunktion mit dem sogenannten Storage Access Framework erstellt. Dies ist jedoch ein Memorandum, da es nur wenige japanische Materialien gibt und dies einige Zeit in Anspruch nahm. Es tut mir leid, wenn ein Fehler vorliegt, da es sich um die erste Android-Entwicklung handelt und es einen Zeitraum von der Entwicklung bis zur Zusammenfassung des Inhalts gibt.
・ Android 6.0.1
Unter Android scheint Intent verwendet zu werden, wenn verschiedene Funktionen anderer Apps und des Android-Standards aufgerufen werden.
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 0);
Durch Setzen von "image / *" in setType können nur Bilder importiert werden.
0 wird im zweiten Argument von startActivityForResult gesetzt, aber hier setzen wir etwas namens requestCode. Dies wird verwendet, um zu bestimmen, von welcher App oder Funktion der Anruf stammt, und wird in dem unten beschriebenen Rückgabeprozess verwendet. Jeder Wert kann verwendet werden, solange er int ist. Bei der Implementierung ist es jedoch besser, ihn zu einer Konstanten zu machen, damit derselbe Wert zum Aufrufen und Zurückgeben verwendet werden kann.
Ich möchte nicht eins nach dem anderen auswählen, daher können Sie mehrere Bilder auswählen.
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, 0);
Wenn Sie es oben belassen, können Sie auch Dateien von Netzwerklaufwerken und anderen Apps auswählen. In diesem Fall ist es ärgerlich, beim Erstellen der Bedienungsanleitung zusätzliche Funktionen zu berühren. Löschen Sie sie daher.
Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, 0);
Ich möchte die Bildformate einschränken, die verarbeitet werden können. Legen Sie daher die Bildformate fest, die ausgewählt werden können.
Wenn es ein Format gibt (Beispiel ist 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);
Zwei oder mehr (Beispiele sind JPEG und 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);
Der Anruf sieht so aus.
Von hier aus geht es um die Verarbeitung auf der Empfangsseite. Wenn Sie es in die mainActivity schreiben, funktioniert es.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
Uri = uri;
if (data.getData() != null) {
//Verarbeitung, wenn das ausgewählte Bild einzeln ist
uri = data.getData();
} else {
//Verarbeitung, wenn mehrere Bilder ausgewählt sind
ClipData cd = data.getClipData();
for (int i=0; i<cd.getItemCount(); i++) {
uri = cd.getItemAt(i).getUri();
}
}
}
}
}
Der requestCode wird vom startActivityForResult () des Aufrufers festgelegt. Wenn mehrere Funktionen zurückkehren, ändern Sie die Verarbeitung für jede Funktion mit if oder swicht.
resultCode ist der Erfolg oder Misserfolg des Aufrufs.
Jetzt können Sie den URI des ausgewählten Bildes abrufen. Den Rest können Sie also erledigen.
Recommended Posts