我的应用程序中有大约10张图像,它们处于可绘制的版本中,而不是从服务器下载。
我需要分享这些图片。
我有这样的解决方案:将drawable转换为文件,保存并从文件夹共享文件。
当我拿到SD卡时,外部存储是否正常。但是当我使用Nexus 5时,例如(内部存储)它会保存一些文件,但由于格式不正常而无法共享它。
请帮助我内部存储或与drawable共享。
private void shareit()
{
Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.son);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
icon.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
File f;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// We can read and write the media
f=new File(Environment.getExternalStorageDirectory() + File.separator + "son.jpg");
}
else{
f = new File(getActivity().getApplicationContext().getCacheDir(), "son.jpg");
if(f.exists()){
Log.i("imageExistsInternal", "file is complete");
}
}
if(!f.exists())
f.mkdir();
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f));
startActivity(Intent.createChooser(share, "Share Image"));
}
答案 0 :(得分:0)
在上面的代码中,您没有将图像写入文件。如果图像不存在,将创建一个目录,因此格式错误。
if(!f.exists())
f.mkdir();
你需要像这样改变
if (!f.exists()) {
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(f);
outputStream.write(bytes.toByteArray());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}