Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Intent Android从外部存储器共享gif图像?_Android_Android Intent_Share_Gif_Animated Gif - Fatal编程技术网

如何通过Intent Android从外部存储器共享gif图像?

如何通过Intent Android从外部存储器共享gif图像?,android,android-intent,share,gif,animated-gif,Android,Android Intent,Share,Gif,Animated Gif,我正在开发动画Gif应用程序,图像从网络下载并存储在手机存储器中。然后,所有的图像都以动画形式完美地显示在我的应用程序中,但问题是当我通过手机上安装的应用程序共享它时。它不共享。图像的路径是正常的,但我仍然无法共享它。我使用以下代码进行共享。请帮忙 public static boolean shareImage(Context context, String imagePath) { File file = new File(imagePath); try {

我正在开发动画Gif应用程序,图像从网络下载并存储在手机存储器中。然后,所有的图像都以动画形式完美地显示在我的应用程序中,但问题是当我通过手机上安装的应用程序共享它时。它不共享。图像的路径是正常的,但我仍然无法共享它。我使用以下代码进行共享。请帮忙

public static boolean shareImage(Context context, String imagePath) {
    File file = new File(imagePath);

    try {
        byte[] readData = new byte[1024 * 500];
        FileInputStream fis = new FileInputStream(file);

        FileOutputStream fos = new FileOutputStream(file);
        int i = fis.read(readData);

        while (i != -1) {
            fos.write(readData, 0, i);
            i = fis.read(readData);
        }

        fos.close();
    } catch (IOException io) {
        showToast(context, io.getLocalizedMessage());
    }      

    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    String dataString = "MY_DATA_STRING";

    Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", file);
    intent.setDataAndType(uri, dataString);
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

    intent.setType("image/gif");
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    context.startActivity(Intent.createChooser(intent, context.getString(R.string.shareStickerTitle)));
    return true;
}
imagePath获得了正确的路径,如下图所示

/sdcard/simulated/0/Android/data/PackageName/files/FolderName/xyz.gif


当“文件”转换为字节时,图像的字节[]将变为(0),图像甚至在应用程序中也会被销毁,而不会被共享。

问题在于输入和输出流。您在同一个文件中读写。
//Share Gif
public void shareGif(Context context, String fileName) {

    String baseDir = Environment.getExternalStorageDirectory().toString() + "/YourFolderName/";

    File file = new File(baseDir + "/" + fileName + ".gif");

    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    String dataString = "MY_DATA_STRING";

    Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", file);
    intent.setDataAndType(uri, dataString);
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

    intent.setType("image/gif");
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    context.startActivity(Intent.createChooser(intent, "Share Emoji"));
}
希望你能得到我的帮助。 这是使用intent共享gif文件的正确方法

您的try-catch块应如下所示。

 try {
    byte[] readData = new byte[1024*500];
    InputStream fis = getResources().openRawResource(getResources().getIdentifier(resourceName, "drawable", getPackageName()));

    FileOutputStream fos = new FileOutputStream(file);
    int i = fis.read(readData);

    while (i != -1) {
        fos.write(readData, 0, i);
        i = fis.read(readData);
    }

    fos.close();
} catch (IOException io) {
}

最简单、最轻松的方法是将它的地址传递给dest活动。您说的“它不共享”是什么意思?会发生什么?你有无意义的代码。您读取和写入同一个文件。就像通过intent共享图像一样,它们位于可以完全共享的drawable文件夹中,但在我的情况下,所有图像都位于手机存储器中,因此我获取该图像的地址/路径,并希望通过intent共享。可能是我的代码有误,因此,请发布/编辑如何共享gif动画图像的实际代码。png或jpg图像可以完美共享,甚至动画gif也可以共享,但如果它位于我的应用程序中的drawable文件夹中,问题是从存储中获取gif图像然后共享,那么如何做到这一点呢?请解释一下你是如何解决用户问题的,而不仅仅是发布代码。做得很好。谢谢如何共享位于可绘制资源文件夹(即整数资源而非字符串文件名)中的动画gif。