Glide делится анимированным GIF-файлом в WhatsApp - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь поделиться анимированным GIF-файлом с помощью библиотеки Glide с помощью: Кэш-папка FileProvider. После этой проблемы: https://github.com/bumptech/glide/issues/459 и этот вопрос: Поделиться файлом изображения из каталога кэша с помощью Intent ~ android

Я получаю Формат файла не поддерживается

Вот код:

 private void saveImageAndShare(GifDrawable gifDrawable) {
        if (gifDrawable != null) {
            String fileName = "sharingGif.gif";
            File sharingGifFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), fileName);
            gifDrawableToFile(gifDrawable, sharingGifFile);
            Uri uri = ImageTypeFileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", sharingGifFile);
            context.grantUriPermission(context.getPackageName(), uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
            shareFile(uri);
        }
    }
 private void shareFile(Uri uri) {
        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("image/gif");
        shareIntent.setPackage("com.whatsapp");
        shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

        shareIntent.putExtra(Intent.EXTRA_STREAM, uri);

        context.startActivity(Intent.createChooser(shareIntent, "Share Emoji"));
    }


    private void gifDrawableToFile(GifDrawable gifDrawable, File gifFile) {
        ByteBuffer byteBuffer = gifDrawable.getBuffer();

        try {
            FileOutputStream output = new FileOutputStream(gifFile);
            byte[] bytes = new byte[byteBuffer.capacity()];
            ((ByteBuffer) byteBuffer.duplicate().clear()).get(bytes);
            output.write(bytes, 0, bytes.length);
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
...