将相机图片保存在文件中,文件未创建

时间:2012-04-03 10:36:00

标签: android android-camera

在我的应用程序中,我需要在用户按下摄像机视图时保存摄像机的图像。到目前为止一切顺利,我遵循官方教程:http://developer.android.com/guide/topics/media/camera.html并且一切正常,除非我尝试在回调中保存图片。实际上,我在try / catch块中没有出错,但我的文件无处可寻。

我在mannifest中添加了正确的权限:

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

在我的回调中,我有:

  private PictureCallback mPicture = new PictureCallback() 
    {
        public void onPictureTaken(byte[] data, Camera camera) 
        {
            Log.d("tag", "Je rentre bien dans la callback");

            //File pictureFile = media.getOutputMediaFile( MediaFile.MEDIA_TYPE_IMAGE );
            File pictureFile =  new File( Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES), "temp.png");


            if (pictureFile == null)
            {
                Log.d("tag", "Error creating media file, check storage permissions ");
                return;
                }

            try 
            {
                FileOutputStream fos = new FileOutputStream( pictureFile );
                Log.d("tag", "Fichier créer : " + pictureFile.getAbsolutePath() );
                fos.write(data);
                fos.close();
            } 
            catch (FileNotFoundException e) 
            {
                Log.d("tag", "File not found " + pictureFile.getAbsolutePath() 
                        + " Readable : " + pictureFile.canRead()
                        + " Writeable : " + pictureFile.canWrite()
                        + " Exist : " + pictureFile.exists() );
            }
            catch (IOException e) 
            {
                Log.d("tag", "Error accessing file");
            }
        }   

我的日志文件显示我的:

    04-03 10:29:28.950: D/tag(15087): Je rentre bien dans la callback
    04-03 10:29:28.960: D/tag(15087): Fichier créer : /mnt/sdcard/Pictures/temp.png

我检查平板电脑中的SD卡,但就像我说的那样,文件无处可寻。我研究了我的问题,但我还没有找到任何有用的东西。 我没有看到我的代码有什么问题或缺少什么。

我希望有人可以帮助我。

2 个答案:

答案 0 :(得分:2)

你可以这样尝试

System.gc();
String fileName = System.currentTimeMillis()+".jpg"; //you can give any name to your image file
String mPathImage = Environment.getExternalStorageDirectory()+ "/" + fileName;
File file = new File(mPathImage);
Uri outputFileUri = Uri.fromFile( file );
Intent mIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mIntent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );
startActivityForResult(mIntent, 1);

答案 1 :(得分:0)

尝试这件事。

    File path = new File(Environment.getExternalStorageDirectory()+ getResources().getString(R.string.QRCode_Path));
    path.mkdirs();

主要是path.mkdirs();即使没有创建也会创建一个文件夹,然后保存文件。