[JAVA] [Android] Übergeben von Bildern und Empfangen von Rückrufen beim Teilen mit ShareCompat

↓ Dieses Ding

Ich hatte das Gefühl, dass es viele Informationen gab, aber diese kamen nicht unerwartet heraus, also schrieb ich ein Memo.

Bibliothek

Implementierung

SomeActivity.java


//Voraussetzung für die Ausführung innerhalb der Aktivität
private void showShareChooser() {
	File tempFile = new File(getApplicationContext().getExternalCacheDir(), tempImgFilePath);

	//Wenn Sie möchten, dass der URI die Datei freigibt, müssen Sie ihn abrufen, indem Sie den Namen der Autorität angeben, die später über FileProvider beschrieben wird.
	Uri uri = FileProvider.getUriForFile(getApplicationContext()
			, getApplicationContext().getPackageName() + ".provider"
			, tempFile);

	ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder.from(this);
	builder.setChooserTitle(chooserTitle) //Titel beim Teilen
			.setSubject(subject) //Gegenstand. Wie es verwendet wird, hängt von der freigegebenen App ab
			.setText(text) //Text. Wie es verwendet wird, hängt von der freigegebenen App ab
			.setStream(uri) //Geben Sie beim Freigeben einer Datei deren URI an
			.setType("image/jpeg"); //MIME-Typ der im Stream angegebenen Datei

	//Erteilen Sie die Leseberechtigung für URI
	Intent intent = builder.createChooserIntent().addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

	//Wenn Sie einen Rückruf erhalten möchten, verwenden Sie diese Absicht, um die Aktivität zu starten
	if (intent.resolveActivity(getPackageManager()) != null) {
		startActivityForResult(intent, SNS_SHARE);
	}

	//Wenn Sie die Ergebnisse nicht erhalten müssen, können Sie einfach mit dem Builder beginnen
	// builder.startChooser();
}

Wenn Sie die Rücksendung erhalten möchten, können Sie sie wie gewohnt mit "onActivityResult" erhalten.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
	switch (requestCode) {
		case SNS_SHARE:
			//Erhalten Sie die Rücksendung und tun Sie etwas
			//resultCode ist immer Null, also RESULT_Beurteilen Sie nicht mit OK
			doSomething();
			break;

		default:
			super.onActivityResult(requestCode, resultCode, data);
			break;
	}
}

Beim Teilen von Dateien

Wenn Sie Bilder usw. freigeben, kann Bitmap nicht so freigegeben werden, wie es ist. Daher muss es einmal in einer Datei gespeichert werden. Darüber hinaus muss das Lesen vom Speicherziel wie folgt zugelassen werden.

Geben Sie zunächst den Pfad in XML an.

src/main/res/xml/provider_paths.xml


<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-cache-path name="cache" path="." />
</paths>

external-cache-path etc. ändert sich je nach Speicherziel. Obwohl in englischer Sprache, siehe Offizielle FileProvider-Referenz. Geben Sie dann diesen Anbieter in "AndroidManifest.xml" an.

AndroidManifest.xml


<manifest
    package="com.example"
    xmlns:android="http://schemas.android.com/apk/res/android">
:
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>
:
    </application>
:
</manifest>

Referenz

Recommended Posts

[Android] Übergeben von Bildern und Empfangen von Rückrufen beim Teilen mit ShareCompat
Testen des Einschlusses von Bildern bei Verwendung von ActiveStorage und Faker
[Rails] So laden Sie Bilder mit Carrierwave und Fog-Aws in AWS S3 hoch
[Rails] So laden Sie Bilder mit refile und refile-s3 in AWS S3 hoch
[Rails] So laden Sie Bilder mit Carrierwave hoch
[Android] So aktivieren / deaktivieren Sie das Benachrichtigungsfeld mit StatusBarManager
So geben Sie Excel und PDF mit Excella aus
POST-Bilder von Android auf PHP mit Retrofit
Ausführen einer Methode und Verspotten mit JUnit
Wie man Stimme oder Musik mit Javascript spielt
[Rails] So laden Sie mehrere Bilder mit Carrierwave hoch
Verwendung der Scope- und Pass-Verarbeitung (Servist)
So verknüpfen Sie Bilder mit FactoryBot Active Storage
Hinzufügen von Zeichen zur Anzeige bei Verwendung der link_to-Methode
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Festlegen von Umgebungsvariablen bei Verwendung von Payjp mit Rails
So implementieren Sie den In-App-Kauf einfach über den Itemstore <Implementierung: Android>
So verwenden Sie OpenCV 4 unter Android und zeigen die Kamera live an
Android App, die Bilder aus der Galerie auswählt und anzeigt
Festlegen und Beschreiben von Umgebungsvariablen mit Rails zsh
Schreiben und Notizen bei der Migration von VB zu JAVA
[Version 2020] So senden Sie eine E-Mail mit Android Studio Javamail
So erstellen Sie eine App mit Tensorflow mit Android Studio
So schließen Sie automatisch generierte von der Jacoco-Abdeckung aus, wenn Sie Lombok verwenden
So verbinden Sie eine Tabelle ohne DBFlute und SQL
So schreiben Sie eine Abfrageoption bei Verwendung von gem ruby-firebase (Denkmal)
Ich wollte eine Zeile animieren, wenn ich Realm und RecyclerView unter Android verwende, aber ich habe aufgegeben
[Schienen] Wie poste ich Bilder?
Umgang mit hochgeladenen Bildern
So minimieren Sie Java-Images
So autorisieren Sie mit graphql-ruby
Wie POST JSON in Java-Methode mit OkHttp3 und Methode mit HttpUrlConnection-
[jOOQ] Wie in der WHERE / AND / OR-Klausel WANN FALLEN
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
So beheben Sie den unbekannten Fehler, der bei der Verwendung von slf4j in Java aufgetreten ist
[Swift5] So kommunizieren Sie von ViewController zu Model und übergeben einen Wert
[Rails 5] Anzeigen des Bildschirms zum Ändern des Kennworts bei Verwendung von devise
[rails6.0.0] Speichern von Bildern mit Active Storage im Assistentenformat
So schränken Sie das Bildformat in der Galerie unter Android ein und wählen und importieren Sie dann mehrere Bilder