Android пишет растровое изображение на SDCard - PullRequest
2 голосов
/ 11 августа 2011

Я пытаюсь записать растровое изображение на SDCard на Android, и я получаю сообщение об ошибке
/mnt/sdcard/PhysicsSketchpad/sketchpad145.png (No such file or directory).
Я объявил разрешение android.permission.WRITE_EXTERNAL_STORAGE в манифесте, и это мой код:

String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() + 
                        "/PhysicsSketchpad/";
File dir = new File(file_path);
dir.mkdirs();
File file = new File(dir, "sketchpad" + pad.t_id + ".png");
FileOutputStream fOut = new FileOutputStream(file);

bmp.compress(Bitmap.CompressFormat.PNG, 85, fOut);
fOut.flush();
fOut.close();

Что происходит?

ОБНОВЛЕНИЕ

Такое впечатление, что при попытке записи в существующийкаталог, я получаю ошибку "Отказано в разрешении",

08-11 09:55:23.796: WARN/Physics Sketchpad(8881): Error when saving: IOException /mnt/sdcard/download/sketchpad54.png (Permission denied)

и при попытке сохранить в новом каталоге я не получаю такой файл или ошибка каталога,
08-11 09:59:20.175: WARN/Physics Sketchpad(9040): Error when saving: IOException /mnt/sdcard/PhysicsSketchpad/sketchpad55.png (No such file or directory)

Кроме того, File.mkdirs() возвращает логическое значение, основываясь на том, успешно это или нет, и вернул false.

Ответы [ 3 ]

4 голосов
/ 11 августа 2011

попробуйте этот код.

  String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() + 
                            "/PhysicsSketchpad";
    File dir = new File(file_path);
if(!dir.exists)
    dir.mkdirs();
    File file = new File(dir, "sketchpad" + pad.t_id + ".png");
    FileOutputStream fOut = new FileOutputStream(file);

    bmp.compress(Bitmap.CompressFormat.PNG, 85, fOut);
    fOut.flush();
    fOut.close();
3 голосов
/ 11 августа 2011

попробуйте этот код.Это сработало для меня.

public void saveBitmap(Bitmap bm)
{
    try
    {
        String mBaseFolderPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/";
        String mFilePath = mBaseFolderPath + "abcd.jpg";

        FileOutputStream stream = new FileOutputStream(mFilePath);
        bm.compress(CompressFormat.JPEG, 100, stream);
        stream.flush();
        stream.close();
    }
    catch(Exception e)
    {
        Log.e("Could not save", e.toString());
    }
}

Шаш

0 голосов
/ 11 августа 2011

вы получаете абсолютный путь, проверьте на ошибку, что вы получаете путь

/mnt/sdcard/AppName/appname145.png

и вы установите

Environment.getExternalStorageDirectory().getAbsolutePath() + 
                        "/PhysicsSketchpad/";

где dir "PhysicsSketchpad" не входит выше указанного пути

попробуйте это

Environment.getExternalStorageDirectory().toString()+ "/PhysicsSketchpad/";
...