↓ 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.
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 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>