Ich versuche, die native Android-Freigabe-Funktion zu verwenden, um eine Reihe von Bildern zu teilen, die ich mit Glide abgerufen. Daher wird jede App, die mit den Bildern kompatibel ist, im Freigabe-Menü von Android angezeigt.Android Teilen mehrerer Bilder mit anderen Apps
Ich habe eine Methode erstellt, die beim Klicken auf die Freigabe aufgerufen wird.
private void onShareClicked() {
GlideUrl glideUrl = new GlideUrl(url1, new LazyHeaders.Builder().addHeader("x-auth-token", mToken).build());
FutureTarget<File> image1 = mGlide.load(glideUrl).downloadOnly(SIZE_ORIGINAL, SIZE_ORIGINAL);
glideUrl = new GlideUrl(url2, new LazyHeaders.Builder().addHeader("x-auth-token", token).build());
FutureTarget<File> image2 = mGlide.load(glideUrl).downloadOnly(SIZE_ORIGINAL, SIZE_ORIGINAL);
new ShareImagesTask(this, "image/png").execute(image1, image2);
}
erstellt Dann ShareImagesTask
, die Sie mehrere Bilder, indem Sie die Anfrage bekommen die Bilder Dateien über Glide gemeinsam nutzen können:
public class ShareImagesTask extends AsyncTask<FutureTarget<File>, Void, ArrayList<Uri>> {
private final Context mContext;
private final String mMimeType;
public ShareImagesTask(Context context, String mimeType) {
this.mContext = context;
this.mMimeType = mimeType;
}
@Override
protected ArrayList<Uri> doInBackground(FutureTarget<File>... targets) {
final ArrayList<Uri> imageUris = new ArrayList<>(targets.length);
for(FutureTarget<File> target : targets) {
try {
File file = target.get();
Uri uri = FileProvider.getUriForFile(mContext, "com.myapp.fileprovider", file);
imageUris.add(uri);
} catch (Exception ex) {
Log.w("SHARE", "Sharing failed for one or more image files.", ex);
}
}
return imageUris;
}
@Override
protected void onPostExecute(ArrayList<Uri> result) {
if(!result.isEmpty()) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, result);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setType(mMimeType);
mContext.startActivity(Intent.createChooser(intent, "Share Your Photo"));
}
}
}
Hier ist meine AndroidManifest.xmlFileProvider
:
<provider
android:name=".provider.MyAppFileProvider"
android:authorities="com.myapp.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
Und schließlich filepaths.xml
:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path name="shared_images" path="/data/data/com.myapp/cache/image_manager_disk_cache/"/>
</paths>
Ich bin in der Lage, an den Punkt des Aufrufs FileProvider.getUriForProvider()
zu kommen, und es gibt die Ausnahme unten. Ich habe auch versucht, den Pfad in filepaths.xml
Änderungen des Pfades in der Ausnahme erwähnt, aber ich bekomme den gleichen Fehler. Irgendwelche Ideen?
java.lang.IllegalArgumentException: Fehlgeschlagen konfiguriert zu finden, die Wurzel /data/data/com.myapp/cache/image_manager_disk_cache/11fa9845150748cc77d49a75954d92f246cc7095e72e36b85d6a07dbdeb9cf46.0
Der erste Vorschlag funktionierte. Ich danke dir sehr! – Adam