如何通过Intent Android从外部存储器共享gif图像?
我正在开发动画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 {
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。