将图像保存到所有设备上的SD卡

时间:2012-10-24 01:57:48

标签: android

我的应用程序涉及从设备的图库中选择图像,然后将该图像的较小版本保存到SD卡上的文件夹中。我遇到的问题是有些用户报告说图片没有保存到文件夹中。然而,大多数用户报告该应用程序运行正常,我无法告诉其他几个用户正在发生的事情。到目前为止,据报道该问题的设备如下:华为T-Mobile myTouch,三星GT-S5830i,HTC Evo 4G和三星Galaxy S2。我自己有一个摩托罗拉Atrix 2,我没有这样的问题。

我的清单中已有标记。我的大多数代码来自其他stackoverflow解决方案,以从库中获取图像,然后将其保存到SD卡。

从图库中获取图片:

public void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) 
    {
         switch(requestCode) 
         {
            case SELECT_IMAGE:
                 image_dir = getPath(data.getData());

                 Bitmap myBitmap = decodeFile(new File(image_dir));

                 resizedBitmap = Bitmap.createScaledBitmap(myBitmap, (int)(myBitmap.getWidth()/2), (int)(myBitmap.getHeight()/2), true);
                 break;
         }
    }
    else
    {
         image_dir = "None";
    }
}

将图像保存到SD卡:

OutputStream fOut = null;
File file = new File(Environment.getExternalStorageDirectory()+"/MyApp",imgname+".jpg");
fOut = new FileOutputStream(file);

resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
fOut.flush();
fOut.close();

对于大多数用户而言,这一切似乎都很好,但对于某些用户来说,图像并没有得到保存。这可能是权限问题还是我在代码本身中忽略的某种设置?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

根据this

This directory may not currently be accessible if it has been mounted by the user on their computer, has been removed from the device, or some other problem has happened

Environment.getExternalStorageDirectory()将返回null,因此您应首先检查Environment.getExternalStorageState()

答案 1 :(得分:0)

原因可能是这些设备不使用流行的外部存储约定/ mnt / sdcard /。以下是Samsung Galaxy S2HTC Evo 4G的一些提示。可能问题不在于SD没有安装,但你应该按照jaredzhang的建议定义运行该检查。 我还建议听取最可能的错误并报告它们 - 例如,检查是否安装了SD,目标文件夹是否存在等等。毋庸置疑,最好是接触其中一个设备并检查你自己。也许您也可以在线搜索这些设备的结果getExternalStorageDirectory()。