【问题标题】:How can I share gif images to other app?如何将 gif 图像分享到其他应用程序?
【发布时间】:2017-10-24 15:27:26
【问题描述】:

我正在使用 glide 将 GIF 图像加载到 RecyclerView 中。

Glide.with(context).load(imageUrl.trim())
                .asGif()
                .placeholder(R.drawable.coming)
                .error(R.drawable.error)
                .diskCacheStrategy(DiskCacheStrategy.SOURCE)
                .into(holder.gif_image);

【问题讨论】:

  • @Tomm 发生了什么???你能帮帮我吗?
  • 我发的链接你打开了吗
  • @Tomm 那是什么意思???你想说什么
  • 你尝试过使用 Content Provider 吗?
  • 没有@MaximTsybanov ,但我该如何使用它???你有什么想法吗??

标签: android


【解决方案1】:

如果你的 GIF 图片在网络上

 whatsapp.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent whatsappIntent = new Intent(Intent.ACTION_SEND);
                    whatsappIntent.setFlags(FLAG_ACTIVITY_NEW_TASK);
                    whatsappIntent.setType("image/*");
                    whatsappIntent.setPackage("com.whatsapp");
                    new Download_GIF(image).execute();
                    Uri imageUri = Uri.parse("file:///storage/emulated/0/downloadedFile.gif");
                    whatsappIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
                    try {
                        startActivity(whatsappIntent);
                    } catch (android.content.ActivityNotFoundException ex) {
                        try {
                            Intent intent = new Intent(Intent.ACTION_VIEW);
                            intent.setData(Uri.parse("market://details?id=com.whatsapp"));
                            startActivity(intent);
                        } catch (Exception e) {
                            Intent intent = new Intent(Intent.ACTION_VIEW);
                            intent.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.whatsapp"));
                            intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
                            startActivity(intent);
                        }
                    }
                }
            });

这里whatsapp 是imageButton

下载_GIF类

public class Download_GIF extends AsyncTask<String, Void, String> {
    static String url_image=null;

    public Download_GIF(String url) {
        this.url_image = url;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params) {

        String filepath = null;
        try {
            //set the download URL, a url that points to a file on the internet
            //this is the file to be downloaded
            URL url = new URL(url_image);
            //create the new connection
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            //set up some things on the connection
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);
            //and connect!
            urlConnection.connect();
            //set the path where we want to save the file
            //in this case, going to save it on the root directory of the
            //sd card.
            File SDCardRoot = Environment.getExternalStorageDirectory();
            //create a new file, specifying the path, and the filename
            //which we want to save the file as.

            String filename = "downloadedFile.gif";   // you can download to any type of file ex:.jpeg (image) ,.txt(text file),.mp3 (audio file)
            Log.i("Local filename:", "" + filename);
            File file;
            file = new File(SDCardRoot, filename);
            if (file.createNewFile()) {
                file.createNewFile();
            }

            //this will be used to write the downloaded data into the file we created
            FileOutputStream fileOutput = new FileOutputStream(file);

            //this will be used in reading the data from the internet
            InputStream inputStream = urlConnection.getInputStream();

            //this is the total size of the file
            int totalSize = urlConnection.getContentLength();
            //variable to store total downloaded bytes
            int downloadedSize = 0;

            //create a buffer...
            byte[] buffer = new byte[1024];
            int bufferLength = 0; //used to store a temporary size of the buffer

            //now, read through the input buffer and write the contents to the file
            while ((bufferLength = inputStream.read(buffer)) > 0) {
                //add the data in the buffer to the file in the file output stream (the file on the sd card
                fileOutput.write(buffer, 0, bufferLength);
                //add up the size so we know how much is downloaded
                downloadedSize += bufferLength;
                //this is where you would do something to report the prgress, like this maybe
                Log.i("Progress:", "downloadedSize:" + downloadedSize + "totalSize:" + totalSize);

            }
            //close the output stream when done
            fileOutput.close();
            if (downloadedSize == totalSize) filepath = file.getPath();

            //catch some possible errors...
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            filepath = null;
            e.printStackTrace();
        }
        Log.i("filepath:", " " + filepath);

        return filepath;


    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
    }
}

【讨论】:

  • 是否需要先保存图片再分享???现在我正在从一些api获取gif图片的url
  • 您的图片在网络上?还是在本地存储中?
  • 如果您的 gif 在网络上,您需要先下载,然后才能分享它
  • 但是我不明白如何保存 gif 图像,如果是 jpeg 或 png 等,我们可以通过位图来做到这一点,但我不知道如何保存 gif ??
  • 我已经回答了如何保存和分享 gif stackoverflow.com/a/46904028/8416317
【解决方案2】:

您不能在 Android 应用之间共享 GIF,因为没有相应的协议。 对不起朋友。

也许如果您想在为您构建的应用程序之间共享,您可以序列化图像和标志(标题或其他参数)以知道它是一个 gif。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2013-04-13
    相关资源
    最近更新 更多