2014-10-13 2 views
0

안녕하세요, 사용자가 카메라를 사용하여 이미지를 캡처하고 내 갤러리의 사용자 정의 폴더에 저장하는 활동을 개발하려고합니다. 여기 코드는 '사용자 정의 폴더에 안드로이드 카메라 이미지가 비어 있습니다.

public class CameraFragment extends Fragment { 
    private static final String TAG = "testcma"; 
    private static final int REQUEST_DATE = 0; 
    private static final int REQUEST_PHOTO = 1; 
    private Camera mCamera; 
    private SurfaceView mSurfaceView; 
    private View mProgressContainer; 
    OutputStream outStream = null; 

    String fileName; 
    private Camera.ShutterCallback mShutterCallback = new Camera.ShutterCallback() { 
     public void onShutter() { 
      // Display the progress indicator 
      mProgressContainer.setVisibility(View.VISIBLE); 
     } 
    }; 
    private Camera.PictureCallback mJpegCallback = new Camera.PictureCallback() { 
     public void onPictureTaken(byte[] data, Camera camera) { 
      // Create a filename 
      fileName = System.currentTimeMillis() + ".jpg"; 
      // Save the jpeg data to disk 
      FileOutputStream os = null; 
      boolean success = true; 
      try { 
       if (isDir()) { 

       } 
       /* 
       * os = getActivity().openFileOutput(fileName, 
       * Context.MODE_PRIVATE); 
       */// os.write(data); 
      } catch (Exception e) { 
       Log.e(TAG, "Error writing to file " + fileName, e); 
       success = false; 
      } finally { 
       try { 
        if (os != null) 
         os.close(); 
       } catch (Exception e) { 
        Log.e(TAG, "Error closing file " + fileName, e); 
        success = false; 
       } 
      } 
      if (success) { 
       Intent i = new Intent(); 
       i.putExtra(Constants.EXTRA_PHOTO_FILENAME, fileName); 
       getActivity().setResult(Activity.RESULT_OK, i); 

      } else { 
       getActivity().setResult(Activity.RESULT_CANCELED); 
      } 
      getActivity().finish(); 
      getActivity().finish(); 
     } 

     private boolean isDir() { 
      // TODO Auto-generated method stub 

       // File file = createImageFile(); 

       final String appDirectoryName = "XYZ"; 
       final File imageRoot = new File(
         Environment 
           .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
         appDirectoryName); 
       boolean x = imageRoot.mkdirs(); 
       x = imageRoot.isDirectory(); 

       OutputStream fOut = null; 
       File imagePath = new File(imageRoot.getAbsolutePath()); 
       File file = new File(imagePath, "GE_" + fileName); // File = new 
                    // File(fileName); 

       try { 
        fOut = new FileOutputStream(file); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 
       try { 

        fOut.flush(); 
        fOut.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       ContentValues values = new ContentValues(); 
       values.put(Images.Media.TITLE, "title"); 
       values.put(Images.Media.DESCRIPTION, "descriptoin"); 
       values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis()); 
       values.put(Images.ImageColumns.BUCKET_ID, file.toString() 
         .toLowerCase(Locale.US).hashCode()); 
       values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, file 
         .getName().toLowerCase(Locale.US)); 
       values.put("_data", file.getAbsolutePath()); 

       ContentResolver cr = getActivity().getContentResolver(); 
       cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
       // final File image = new File(imageRoot,fileName); 

      return false; 

     } 
    }; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     View view = inflater.inflate(R.layout.fragment_pin_camera, container, 
       false); 

     mProgressContainer = view 
       .findViewById(R.id.pin_camera_progressContainer); 
     mProgressContainer.setVisibility(View.INVISIBLE); 
     ImageButton takePicButton = (ImageButton) view 
       .findViewById(R.id.camera_button); 
     takePicButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if (mCamera != null) { 
        mCamera.takePicture(mShutterCallback, null, mJpegCallback); 
       } 
      } 
     }); 
     mSurfaceView = (SurfaceView) view 
       .findViewById(R.id.pin_camera_surfaceView); 
     SurfaceHolder holder = mSurfaceView.getHolder(); 
     holder.addCallback(new SurfaceHolder.Callback() { 
      public void surfaceCreated(SurfaceHolder holder) { 
       // Tell the camera to use this surface as its preview area 
       try { 
        if (mCamera != null) { 
         mCamera.setPreviewDisplay(holder); 
        } 
       } catch (IOException exception) { 
        Log.e(TAG, "Error setting up preview display", exception); 
       } 
      } 

      public void surfaceDestroyed(SurfaceHolder holder) { 
       // We can no longer display on this surface, so stop the 
       // preview. 
       if (mCamera != null) { 
        mCamera.stopPreview(); 
       } 
      } 

      public void surfaceChanged(SurfaceHolder holder, int format, int w, 
        int h) { 
       if (mCamera == null) 
        return; 
       // The surface has changed size; update the camera preview size 
       Camera.Parameters parameters = mCamera.getParameters(); 
       Size s = getBestSupportedSize(
         parameters.getSupportedPreviewSizes(), w, h); // To be 
                     // reset 
                     // in 
                     // the 
                     // next 
                     // section 
       parameters.setPreviewSize(s.width, s.height); 
       s = getBestSupportedSize(parameters.getSupportedPictureSizes(), 
         w, h); 
       parameters.setPictureSize(s.width, s.height); 
       mCamera.setParameters(parameters); 
       try { 
        mCamera.startPreview(); 
       } catch (Exception e) { 
        Log.e(TAG, "Could not start preview", e); 
        mCamera.release(); 
        mCamera = null; 
       } 
      } 
     }); 
     // 
     return view; 
    } 

    @TargetApi(20) 
    @Override 
    public void onResume() { 
     super.onResume(); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { 
      mCamera = Camera.open(0); 
     } else { 
      mCamera = Camera.open(); 
     } 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     if (mCamera != null) { 
      mCamera.release(); 
      mCamera = null; 
     } 
    } 

    private Size getBestSupportedSize(List<Size> sizes, int width, int height) { 
     Size bestSize = sizes.get(0); 
     int largestArea = bestSize.width * bestSize.height; 
     for (Size s : sizes) { 
      int area = s.width * s.height; 
      if (area > largestArea) { 
       bestSize = s; 
       largestArea = area; 
      } 
     } 
     return bestSize; 
    } 

    private File createImageFile() throws IOException { 
     // Create an image file name 
     String timeStamp = System.currentTimeMillis() + ""; 
     fileName = "JPEG_" + timeStamp + "_"; 
     String storageDir = Environment 
       .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) 
       + "/XYZ"; 
     File dir = new File(storageDir); 
     dir.mkdir(); 

     File image = new File(storageDir + "/" + fileName + ".jpg"); 

     // Save a file: path for use with ACTION_VIEW intents 
     fileName = image.getAbsolutePath(); 
     ContentValues values = new ContentValues(); 
     values.put(Images.Media.TITLE, "title"); 
     values.put(Images.Media.DESCRIPTION, "descriptoin"); 
     values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis()); 
     values.put(Images.ImageColumns.BUCKET_ID, 
       image.toString().toLowerCase(Locale.US).hashCode()); 
     values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, image.getName() 
       .toLowerCase(Locale.US)); 
     values.put("_data", image.getAbsolutePath()); 

     ContentResolver cr = getActivity().getContentResolver(); 
     cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

     Log.i(TAG, "photo path = " + fileName); 
     return image; 
    } 

} 

는 이미지를 캡처하고 그 폴더 및 이미지 파일을 생성하지만, 이미지 그냥 평평한 검은 비어 사용하고, 당신은 그

답변

0

당신은 실제로 jpeg 버퍼 데이터를 저장하지 않는 나에게 도움이 될 수 있습니다 파일에 isDir 디렉토리를 만들고 creat fOut = new FileOutputStream(file);와 확장 jpg로이 파일을 보내고 있지만 여기에

편집를 실제 이미지 내용을 저장하지 않는 것은 당신이 파일

String fileName = System.currentTimeMillis() + ".jpg"; 

File directory = new File(Environment 
    .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "XYZ"); 

    // Save the jpeg data to disk 
    boolean success = true; 
    try { 
    if (!directory.isDirectory() && !directory.mkdirs()) { 
     throw new IOException("unable to make directories for path " + directory); 
    } 

    File file = new File(directory, "GE_" + fileName); 
    FileOutputStream fOut = new FileOutputStream(file); 

    fOut.write(data); 
    fOut.close(); 
    MediaScannerConnection.scanFile(CameraActivity.this, new String[] {file.getAbsolutePath()}, 
           new String[]{"image/jpg"}, null); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
에 데이터를 저장할 수있는 방법입니다
관련 문제