我在我的应用程序中创建图像并希望共享这些社交网络 (facebook)、邮件应用程序 (gmail) 和其他可以“接收”图像的应用程序。
问题的根源(我认为)是我不想将外部存储用作图像的基础。我想使用我的数据文件夹或缓存文件夹,因为它们都不需要任何访问权限。
我用来将图像写入文件的代码(并且我指定了MODE_WORLD_READABLE
其他应用程序可以读取它们):
FileOutputStream fos = null;
try {
fos = context.openFileOutput("image.jpg", Context.MODE_WORLD_READABLE);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
} finally {
if (fos != null)
fos.close();
}
这是我分享图像的代码:
File internalFile = context.getFileStreamPath("image.jpg");
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(internalFile));
intent.setType("image/jpeg");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(Intent.createChooser(intent, "share"));
此解决方案非常简单,适用于 facebook 等应用程序,但不适用于失败的 gmail:
file:// attachment paths must point to file:///mnt/sdcard
有许多“黑客”(见下文)可以让它与 gmail 一起使用,但我让我问自己是否有更好的方法来共享没有黑客的图像,这是我忽略的。所以,对于问题:
- 共享图像的最佳方式是什么?(外置储存?)
- 是否还有其他(错误)行为与 gmail 类似的应用程序?(我在 google+ 上看到了一些问题)
- 如果没有其他方法:我可以编写特殊意图以共享到特定应用程序。当用户在我的监视列表中选择应用程序时,我有默认的共享方式并覆盖它?