Android将图像保存到SD卡

UPDATE

添加

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

现在清单一切正常。

好吧,我有一个应用程序,我已经开始创build,最终我想能够拍照,然后把你带到另一个屏幕,让你能够“使用”或“重拍”图片。

当图像被拿走时,需要将其保存到SD卡上的新文件夹中(如果该文件夹不存在,则需要创build它)。 几个星期前我有这个工作,但在我做了一些编辑和closures日食后,我似乎无法恢复工作?

这部分是在int imageNum = 0; 我已经添加了imagesFolder.mkdirs(); 我相信是正确的创build一个新的文件夹,但即使这似乎没有工作。

现在图像被拿走了,新的文件夹也没有被创build或图像被保存。

 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; } } 

Solutions Collecting From Web of "Android将图像保存到SD卡"