我在我的应用程序中创建图像,并希望共享这些社交网络(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一起使用,但是我让自己问自己是否有更好的方法来分享没有黑客的图像,这是我忽略的。那么,对于问题:
答案 0 :(得分:0)
您是否尝试过ParecelableFileDescriptor?
http://developer.android.com/reference/android/os/ParcelFileDescriptor.html
创建
static ParcelFileDescriptor open(File file, int mode, Handler handler, ParcelFileDescriptor.OnCloseListener listener)
创建一个访问给定文件的新ParcelFileDescriptor。
static ParcelFileDescriptor open(File file, int mode)
Create a new ParcelFileDescriptor accessing a given file.
接收方这样: Returning an Input Stream from Parcel File Descriptor using Androids DownloadManager
答案 1 :(得分:0)
你应该做3个步骤 拍照。
public Bitmap takeScreenshot() {
View rootView = findViewById(android.R.id.content).getRootView();
rootView.setDrawingCacheEnabled(true);
return rootView.getDrawingCache();
}
保存图片。
public String saveBitmap(Bitmap bitmap) {
File imagePath = new File(Environment.getExternalStorageDirectory() + “/screenshot.png”);
FileOutputStream fos;
try {
fos = new FileOutputStream(imagePath);
bitmap.compress(CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
Log.e(“GREC”, e.getMessage(), e);
} catch (IOException e) {
Log.e(“GREC”, e.getMessage(), e);
}
return imagePath.getAbsolutePath();
}
分享到社交网络。