2012-01-03 45 views
7

CẬP NHẬTAndroid Save Image vào thẻ SD

Added

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

để manifest tất cả các công trình ok bây giờ. Ok, vì vậy tôi có một ứng dụng tôi đã bắt đầu để tạo ra mà cuối cùng tôi muốn để có thể chụp ảnh, sau đó sẽ đưa bạn đến một màn hình cho phép bạn có thể "Sử dụng" hoặc "Retake" các hình ảnh.

Khi hình ảnh được chụp, cần phải lưu vào thư mục mới trên thẻ SD, (nếu thư mục không có thì cần phải tạo thư mục đó). Tôi đã có tất cả điều này làm việc một vài tuần trước, nhưng sau khi tôi đã làm một số chỉnh sửa và tắt eclipse tôi không thể dường như làm cho nó trở lại làm việc?

Mục này là sau int imageNum = 0; tôi đã thêm imagesFolder.mkdirs(); mà tôi tin là chính xác để tạo một thư mục mới nhưng ngay cả điều này có vẻ không hoạt động ngay bây giờ.

Bây giờ hình ảnh chỉ được chụp và cả thư mục mới sẽ không được tạo hoặc hình ảnh được lưu.

public class AndroidCamera extends Activity implements SurfaceHolder.Callback { 

Camera camera; 
SurfaceView surfaceView; 
SurfaceHolder surfaceHolder; 
boolean previewing = false; 
LayoutInflater controlInflater = null; 

final int RESULT_SAVEIMAGE = 0; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    getWindow().setFormat(PixelFormat.UNKNOWN); 
    surfaceView = (SurfaceView) findViewById(R.id.camerapreview); 
    surfaceHolder = surfaceView.getHolder(); 
    surfaceHolder.addCallback(this); 
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    controlInflater = LayoutInflater.from(getBaseContext()); 
    View viewControl = controlInflater.inflate(R.layout.control, null); 
    LayoutParams layoutParamsControl = new LayoutParams(
      LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    this.addContentView(viewControl, layoutParamsControl); 

    Button buttonTakePicture = (Button) findViewById(R.id.takepicture); 
    buttonTakePicture.setOnClickListener(new Button.OnClickListener() { 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      camera.takePicture(myShutterCallback, myPictureCallback_RAW, 
        myPictureCallback_JPG); 

     } 
    }); 
} 

ShutterCallback myShutterCallback = new ShutterCallback() { 

    public void onShutter() { 
     // TODO Auto-generated method stub 

    } 
}; 

PictureCallback myPictureCallback_RAW = new PictureCallback() { 

    public void onPictureTaken(byte[] arg0, Camera arg1) { 
     // TODO Auto-generated method stub 

    } 
}; 

PictureCallback myPictureCallback_JPG = new PictureCallback(){ 

    public void onPictureTaken(byte[] arg0, Camera arg1) { 
     // TODO Auto-generated method stub 
     /*Bitmap bitmapPicture 
      = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); */ 


     int imageNum = 0; 
     Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     File imagesFolder = new File(Environment.getExternalStorageDirectory(), "BeatEmUp"); 
     imagesFolder.mkdirs(); 
     String fileName = "image_" + String.valueOf(imageNum) + ".jpg"; 
     File output = new File(imagesFolder, fileName); 
     while (output.exists()){ 
      imageNum++; 
      fileName = "image_" + String.valueOf(imageNum) + ".jpg"; 
      output = new File(imagesFolder, fileName); 
     } 
     Uri uriSavedImage = Uri.fromFile(output); 
     imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 


     OutputStream imageFileOS; 
     try { 
      imageFileOS = getContentResolver().openOutputStream(uriSavedImage); 
      imageFileOS.write(arg0); 
      imageFileOS.flush(); 
      imageFileOS.close(); 

      Toast.makeText(AndroidCamera.this, 
        "Image saved: ", 
        Toast.LENGTH_LONG).show(); 

     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     camera.startPreview(); 
    }}; 


public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
    // TODO Auto-generated method stub 
    if (previewing) { 
     camera.stopPreview(); 
     previewing = false; 
    } 

    if (camera != null) { 
     try { 
      camera.setPreviewDisplay(surfaceHolder); 
      camera.startPreview(); 
      previewing = true; 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

public void surfaceCreated(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 

    camera = Camera.open(); 
    try { 
     Camera.Parameters parameters = camera.getParameters(); 
     if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { 
      // This is an undocumented although widely known feature 
      parameters.set("orientation", "portrait"); 
      // For Android 2.2 and above 
      camera.setDisplayOrientation(90); 
      // Uncomment for Android 2.0 and above 
      parameters.setRotation(90); 
     } else { 
      // This is an undocumented although widely known feature 
      parameters.set("orientation", "landscape"); 
      // For Android 2.2 and above 
      camera.setDisplayOrientation(0); 
      // Uncomment for Android 2.0 and above 
      parameters.setRotation(0); 
     } 
     camera.setParameters(parameters); 
     camera.setPreviewDisplay(holder); 
    } catch (IOException exception) { 
     camera.release(); 

    } 
    camera.startPreview(); 

} 

public void surfaceDestroyed(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 
    camera.stopPreview(); 
    camera.release(); 
    camera = null; 
    previewing = false; 
} 
} 
+2

Bạn nhận bất kỳ loại lỗi? Tệp kê khai của bạn có liệt kê các quyền ghi vào thẻ SD không? –

+0

Cảm ơn sai lầm ngớ ngẩn không thêm quyền vào tệp kê khai :) – Matt

+0

Bạn có muốn thêm câu trả lời này làm câu trả lời sau đó tôi có thể chấp nhận hay không, nó có thể giúp người dùng khác. – Matt

Trả lời

8

Bạn nên chắc chắn rằng danh sách manifest các quyền ghi vào thẻ SD:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
Các vấn đề liên quan