-2

我正在尝试从图像视图中保存图像,但出现异常(Read-only file system)

我试过这段代码,

bitmap1 = imageView.getDrawingCache(); //for retrieving the Image

public void saveOnClick(View view)
{
    try 
    {
            String filename="qrimage";  
            FileOutputStream out = new FileOutputStream(filename);
            bitmap1.compress(Bitmap.CompressFormat.PNG, 90, out);
            Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();

    } 
    catch (Exception e) 
    {
           e.printStackTrace();
           Toast.makeText(getApplicationContext(), e.getMessage()+" Not Saved!", Toast.LENGTH_SHORT).show();
    }
}
4

4 回答 4

1

用户权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
于 2013-09-26T07:27:18.077 回答
0

这是一个保存功能

void Save() {
    final File myDir = new File(folder);
    myDir.mkdirs();
    final Random generator = new Random();
    int n = 10000;
    n = generator.nextInt(n);
    final String fname = "StyleMe-" + n + ".png";
    file = new File(myDir, fname);
    if (file.exists())
        file.delete();
    try {

        mCBitmap.compress(CompressFormat.JPEG, 100, out);

        out.flush();
        out.close();
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                Uri.parse("file://"
                        + Environment.getExternalStorageDirectory())));
        Toast.makeText(getApplication(), "Image Saved", Toast.LENGTH_SHORT)
                .show();

    } catch (final Exception e) {

    }
}

只需调用Save();按钮的 onClick 即可。PS您必须修改名称和位图名称。

--- 将这些声明为全局

    static File file;
String folder = "/sdcard/Pictures/YourFolderName";

并且不要忘记设置对存储的读写权限。

于 2013-09-26T07:26:27.903 回答
0

试试这个方法

public void saveOnClick(View view)
    {
        try 
        {

                imageView.setDrawingCacheEnabled(true); //UPDATE HERE
                imageView.buildDrawingCache(); //UPDATE HERE
                bitmap1 = imageView.getDrawingCache(); //UPDATE HERE

                String filename="qrimage";  
                FileOutputStream out = new FileOutputStream(filename);
                bitmap1.compress(Bitmap.CompressFormat.PNG, 90, out);
                Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();

        } 
        catch (Exception e) 
        {
               e.printStackTrace();
               Toast.makeText(getApplicationContext(), e.getMessage()+" Not Saved!", Toast.LENGTH_SHORT).show();
        }
    }
于 2013-09-26T10:56:03.510 回答
-1

首先确保您的应用已启用存储权限:

转到设备设置>设备>应用程序>应用程序管理器>“您的应用”>权限>启用存储权限!

清单中的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

所以,如果你想在你的文件存储中创建你自己的目录,你可以使用类似的东西:

String myDate = getCurrentDateAndTime();
FileOutputStream outStream = null;
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File(sdCard.getAbsolutePath() + "/YourFolderName");
dir.mkdirs();
String fileName = "YourFileName_"+myDate+".jpg";
File outFile = new File(dir, fileName);
outStream = new FileOutputStream(outFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
outStream.flush();
outStream.close();
//to refresh the gallery
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(file));
sendBroadcast(intent);
}

希望这可以帮助!

于 2016-08-11T20:01:56.613 回答