[JAVA] [Android] Comment transmettre des images et recevoir des rappels lors du partage à l'aide de ShareCompat

↓ Cette chose

J'ai senti qu'il y avait beaucoup d'informations, mais elles ne sont pas sorties de façon inattendue, alors j'ai écrit une note.

Bibliothèque

la mise en oeuvre

SomeActivity.java


//Code prérequis à exécuter à partir de l'activité
private void showShareChooser() {
	File tempFile = new File(getApplicationContext().getExternalCacheDir(), tempImgFilePath);

	//Si vous souhaitez obtenir l'URI pour partager le fichier, vous devez l'obtenir en spécifiant le nom de l'autorité décrite plus tard via FileProvider.
	Uri uri = FileProvider.getUriForFile(getApplicationContext()
			, getApplicationContext().getPackageName() + ".provider"
			, tempFile);

	ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder.from(this);
	builder.setChooserTitle(chooserTitle) //Titre lors du partage
			.setSubject(subject) //matière. La façon dont il est utilisé dépend de l'application partagée
			.setText(text) //Texte. La façon dont il est utilisé dépend de l'application partagée
			.setStream(uri) //Lors du partage d'un fichier, spécifiez son URI
			.setType("image/jpeg"); //Type MIME du fichier spécifié dans le flux

	//Accorder l'autorisation de lecture sur l'URI
	Intent intent = builder.createChooserIntent().addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

	//Si vous souhaitez recevoir un rappel, utilisez cette intention pour démarrer l'activité
	if (intent.resolveActivity(getPackageManager()) != null) {
		startActivityForResult(intent, SNS_SHARE);
	}

	//Si vous n'avez pas besoin de recevoir les résultats, vous pouvez simplement commencer à partir du constructeur
	// builder.startChooser();
}

Si vous souhaitez recevoir le retour, vous pouvez le recevoir avec ʻonActivityResult` comme d'habitude.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
	switch (requestCode) {
		case SNS_SHARE:
			//Recevez le retour et faites quelque chose
			//resultCode est toujours zéro, donc RESULT_Ne jugez pas avec OK
			doSomething();
			break;

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

Lors du partage de fichiers

Lors du partage d'images, etc., Bitmap ne peut pas être partagé tel quel, il est donc nécessaire de l'enregistrer une fois dans un fichier. De plus, il est nécessaire d'autoriser la lecture à partir de la destination de sauvegarde comme suit.

Tout d'abord, spécifiez le chemin en XML.

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. change en fonction de la destination de sauvegarde. Bien qu'il soit en anglais, voir [Official File Provider Reference](https://developer.android.com/reference/android/support/v4/content/FileProvider). Spécifiez ensuite ce fournisseur dans ʻAndroidManifest.xml.

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>

référence

Recommended Posts

[Android] Comment transmettre des images et recevoir des rappels lors du partage à l'aide de ShareCompat
Comment tester avec des images lors de l'utilisation d'ActiveStorage et de Faker
[Rails] Comment télécharger des images sur AWS S3 à l'aide de Carrierwave et de fog-aws
[Rails] Comment télécharger des images sur AWS S3 à l'aide de refile et refile-s3
[Rails] Comment télécharger des images à l'aide de Carrierwave
[Android] Comment activer / désactiver le panneau de notification à l'aide de StatusBarManager
Comment sortir Excel et PDF avec Excella
POST des images d'Android vers PHP en utilisant Retrofit
Comment exécuter une méthode et simuler avec JUnit
Comment jouer de la voix ou de la musique en utilisant javascript
[Rails] Comment télécharger plusieurs images à l'aide de Carrierwave
Comment utiliser la portée et le traitement des passes (servist)
Comment lier des images à l'aide de FactoryBot Active Storage
Comment ajouter des caractères à afficher lors de l'utilisation de la méthode link_to
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment définir des variables d'environnement lors de l'utilisation de Payjp avec Rails
Comment mettre en œuvre facilement les achats intégrés à l'aide d'itemsstore <Implémentation: Android>
Comment utiliser OpenCV 4 sur Android et afficher la vue en direct de la caméra
Application Android qui sélectionne et affiche des images de la galerie
Comment définir et décrire des variables d'environnement à l'aide de Rails zsh
Comment écrire et noter lors de la migration de VB vers JAVA
[Version 2020] Comment envoyer un e-mail à l'aide d'Android Studio Javamail
Comment créer une application à l'aide de Tensorflow avec Android Studio
Comment exclure la couverture générée automatiquement de Jacoco lors de l'utilisation de Lombok
Comment joindre une table sans utiliser DBFlute et SQL
Comment écrire une option de requête lors de l'utilisation de gem ruby-firebase (memorial)
Je voulais animer une ligne lors de l'utilisation de realm et RecyclerView sur Android, mais j'ai abandonné
[rails] Comment publier des images
Comment gérer les images téléchargées
Comment réduire les images Java
Comment autoriser à l'aide de graphql-ruby
Comment POST JSON dans la méthode Java en utilisant OkHttp3 et la méthode en utilisant HttpUrlConnection-
[jOOQ] Comment utiliser CASE WHEN dans la clause WHERE / AND / OR
[Android] Convertissez Map en JSON à l'aide de GSON avec Kotlin et Java
Comment résoudre l'erreur inconnue apparue lors de l'utilisation de slf4j en Java
[Swift5] Comment communiquer de ViewController à Model et transmettre une valeur
[Rails 5] Comment afficher l'écran de changement de mot de passe lors de l'utilisation de l'appareil
[rails6.0.0] Comment enregistrer des images en utilisant Active Storage au format assistant
Comment affiner le format d'image de la galerie sur Android, puis sélectionner et importer plusieurs images