2

我的问题

我有一个相机意图,我希望将图像保存到我的内部数据目录中的一个目录中。

我使用以下方法创建了目录:

        File mydir3 = new File(this.getApplicationContext().getFilesDir(),File.separator+"MyApplication"+File.separator+CCPhotoManager.DIRECTORY+File.separator+PhotoManager);
        mydir3.mkdirs();

然后我继续创建具有指定名称的文件,如下所示。

       String filePath = this.getApplicationContext().getFilesDir()+File.separator+"MyApplication"+File.separator+PhotoManager+File.separator+PhotoManager().getNewPhotoFileName()+PhotoManager;

        File file = new File(filePath);

然后我在某处读到没有保存图像的原因是因为相机没有访问我的应用程序数据目录的权限,并且您需要使用它FileOutputStream来更改权限。但是,由于我的文件路径有路径分隔符,我无法使用openFileStream(filePath,Context.MODE_WORLD_WRITABLE);.

这就是我尝试以下内容的原因。

       try {
            FileOutputStream fos = new FileOutputStream(file);
            fos.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

但是,这显然不起作用,因为没有图像保存到使用下面的代码创建的文件中。

        Uri uriSavedImage=Uri.fromFile(file);
        Log.d("PhotoManager", "adding extra to intent: "+uriSavedImage.toString());
        Intent launchcameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        launchcameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
        startActivityForResult(launchcameraIntent,CAMERA_PIC_REQUEST);

我的问题

如何获得相机意图以将其图像保存到内部数据中的自定义目录?

提前致谢

4

2 回答 2

1

我曾经遇到过同样的问题,我用这个解决了它:

1.从默认文件夹中存在的图像创建一个文件:

File from = new File("path to default file created");

在您的代码路径中,此处描述为文件路径。

2.在您希望文件另存为的位置创建另一个文件:

File to = new File("target file path");

3.将文件重命名为:

from.renameTo(to);

这样,默认路径中的文件将自动删除并在新路径中创建。

谢谢

于 2012-10-16T11:41:21.260 回答
1

所以这就是我解决它的方法。还要感谢@AppMobiGurmeet。

将照片保存到 SDCard 上的文件中,如下所示。

        File directory= new File(Environment.getExternalStorageDirectory()+File.separator+"MyApplication"+File.separator+"TemporaryImages");//+File.separator+CCPhotoManager.getInstance().getNewPhotoFileName()+CCPhotoManager.JPEG_FILE_SUFFIX);
        directory.mkdirs();

        File externalFile = new File(Environment.getExternalStorageDirectory()+File.separator+"MyApplication"+File.separator+"TemporaryImages"+File.separator+CCPhotoManager.getInstance().getNewPhotoFileName()+CCPhotoManager.JPEG_FILE_SUFFIX);

        Uri uriSavedImage=Uri.fromFile(externalFile);
        Log.d("PhotoManager", "adding extra to intent: "+uriSavedImage.toString());
        Intent launchcameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        launchcameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
        startActivityForResult(launchcameraIntent,CAMERA_PIC_REQUEST);

然后是活动结果。(返回意图时)

            // SAVE THE PHOTO TO THE INTERNAL DATA DIRECTORY
            File to = new File(MyApplication.getAppContext().getFilesDir()+File.separator+"MyApplication"+File.separator+DIRECTORY+File.separator+this._currentPhotoName+JPEG_FILE_SUFFIX);
            File from = new File(Environment.getExternalStorageDirectory()+File.separator+"MyApplication"+File.separator+"TemporaryImages"+File.separator+this._currentPhotoName+JPEG_FILE_SUFFIX);

            try {
                FileChannel destination = new FileOutputStream(to).getChannel();
                FileChannel source = new FileInputStream(from).getChannel();
                if (destination != null && source != null) {
                    destination.transferFrom(source,0,source.size());
                    from.delete();
                }
                destination.close();
                source.close();
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

然而,我现在已经决定,在所有这些闲逛之后,内部数据目录不是存储图像和文件等内容的最佳位置,因为在某些设备上,内部空间非常小(三星 Galaxy Ace 大约200MB)。

我希望这可以帮助别人。

于 2012-10-16T14:34:13.753 回答