-1

我有一个应用程序,你可以在上面签名。我无法保存图像。我希望该文件保存在 sdcard/signature 中,因为那是我在 strings.xml 中指定的文件夹并创建了该文件夹。但相反,它将图像保存到 DCIM/camera 文件夹,而不是 sdcard/signature 文件夹中。

我已经阅读了有关从 DCIM 文件夹中删除图像的信息,所以这不是问题。但是如果有人能告诉我为什么图像没有保存在 sd/signature 中,我真的会很高兴

在 onCreate 中会发生这种情况(外部目录只是一个名称,例如 StoreSignature 用于存储图像的文件夹):

 tempDir = Environment.getExternalStorageDirectory() + "/" + getResources().getString(R.string.external_dir) + "/";
    ContextWrapper cw = new ContextWrapper(getApplicationContext());
    File directory = cw.getDir(getResources().getString(R.string.external_dir), Context.MODE_PRIVATE);

这是保存方法:

mGetSign.setOnClickListener(new OnClickListener() 
    {        
        public void onClick(View v) 
        {
            Log.v("log_tag", "Panel Saved");
            boolean error = captureSignature();
            if(!error){
                mView.setDrawingCacheEnabled(true);
                mSignature.save(mView);
                Bundle b = new Bundle();

                String status = "done";
                File path = mypath;
                Log.i("info4", path.toString());
                String[] arr={status, path.toString()};
                b.putStringArray("status", arr);
                Log.i("info5", arr.toString());
                Intent intent = new Intent();
                intent.putExtras(b);
                setResult(RESULT_OK,intent);   
                finish();
            }
        }
    });

最后这是准备文件夹的地方(不知道这是否与is有关)

private boolean prepareDirectory() 
{
    try
    {
        if (makedirs()) 
        {
            return true;
        } else {
            return false;
        }
    } catch (Exception e) 
    {
        e.printStackTrace();
        Toast.makeText(this, "Kan het file systeem niet vinden.. Zit de SD-kaart er goed in?", 1000).show();
        return false;
    }
}

/**
 * Creates a directory
 * 
 * @return whether the directory is created or not
 */
private boolean makedirs() 
{
    File tempdir = new File(tempDir);
    if (!tempdir.exists())
        tempdir.mkdirs();

    if (tempdir.isDirectory()) 
    {
        File[] files = tempdir.listFiles();
        for (File file : files) 
        {
            if (!file.delete()) 
            {
                System.out.println("Deleten is mislukt " + file);
            }
        }
    }
    return (tempdir.isDirectory());
}

Strings.xml(签名值)

<string name="cancel">Annuleren</string>
<string name="clear">Opnieuw</string>
<string name="save">Opslaan</string>

<string name="naam">Naam</string>
<string name="external_dir">Handtekening</string>
<string name="input"></string>
<string name="title_activity_signature">Handtekening</string>

有没有人看到我做错了什么?

提前致谢!

4

2 回答 2

0

试试这个代码:

private void SaveIamge(Bitmap finalBitmap) {

        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root + "/saved_images");    
        myDir.mkdirs();
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image-"+ n +".jpg";
        File file = new File (myDir, fname);
        if (file.exists ()) file.delete (); 
        try {
               FileOutputStream out = new FileOutputStream(file);
               finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
               out.flush();
               out.close();

        } catch (Exception e) {
               e.printStackTrace();
        }
}

还放了manifest的权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
于 2013-10-28T07:25:00.660 回答
0

试试下面的链接。首先,您应该检查天气外部存储是否可用。它会解决你的问题

Android将文件保存到外部存储

检查此链接中的所有答案

于 2013-09-27T06:34:30.647 回答