2012-01-03 11 views
7

UPDATEAndroidの画像保存が

追加

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

私は最終的に写真を撮りたいと思っているアプリを作りました。写真を撮って、別の画面に移動して、 "使用"または "再撮影"できるようにします。画像。

イメージを撮るときは、SDカードの新しいフォルダに保存する必要があります(フォルダがない場合は作成する必要があります)。私はこの2週間前にすべての作業をしていたが、私はいくつかの編集を行い、日食をシャットダウンした後、私はそれを働かせるように見える?

このセクションはint imageNum = 0;の後にあります。私はimagesFolder.mkdirs();を追加しました。新しいフォルダを作成するには正しいですが、これは現在動作していないようです。

これで画像が取得され、新しいフォルダも作成されず、画像も保存されません。

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

あなたは、エラーのいずれかの種類を取得していますか?マニフェストにSDカードに書き込む権限がリストされていますか? –

+0

マニフェストに権限を追加していない、愚かな間違いありがとう:) – Matt

+0

これを答えとして追加したいのですが、受け入れることができます。他のユーザーに役立つかもしれません。 – Matt

答えて

8

あなたは、SDカードへの書き込み権限マニフェストのリストを確認してください:

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