안드로이드 개발 질문/답변
(글 수 45,052)
어느분 블로그에서 유용한 코드를 보게되었는데요
직접해보니깐
sdcard에 저장이되지 않아요 .ㅜ.ㅜ
뭐가 문제있는지좀 봐주세요
package com.android.test;
import android.app.Activity; import android.content.Context; import android.content.pm.ActivityInfo; import android.hardware.Camera; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.Window; import java.io.IOException; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.hardware.Camera; import android.hardware.Camera.ShutterCallback; import android.hardware.Camera.PictureCallback; import android.hardware.Sensor; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.FrameLayout; import android.widget.Button;
import java.io.File; import java.io.FileInputStream; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import java.io.FileNotFoundException; import java.io.FileOutputStream; import android.widget.ImageView;
public class TestActivity extends Activity
{
private static final String TAG="CamTest";
Camera camera;
Preview preview;
Button buttonClick;
ImageView imageview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Log.d(TAG, "Created ");
setWindowProperties();
buttonClick = (Button) findViewById(R.id.buttonClick);
buttonClick.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Log.d(TAG, "onClick - jpeg");
preview.camera.takePicture(shutterCallback, rawCallback,jpegCallback);
}
});
}
public void setWindowProperties()
{
// Set full screen view
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// Fix window orientation mode
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
this.setContentView(R.layout.main);
preview = new Preview(this);
imageview = (ImageView)findViewById(R.id.picview);
((FrameLayout) findViewById(R.id.preview)).addView(preview);
Log.d(TAG, "setWindowProperties");
}
PictureCallback jpegCallback = new PictureCallback()
{
public void onPictureTaken(byte[] data, Camera camera)
{
FileOutputStream outStream = null;
FileInputStream inputStream = null;
File file = null;
long fileNamePrefix = System.currentTimeMillis();
try
{
outStream = new FileOutputStream(String.format("/sdcard/DCIM/Camera/%d.jpg", fileNamePrefix));
outStream.write(data);
outStream.close();
Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
file = new File(String.format("/sdcard/DCIM/Camera/%d.jpg", fileNamePrefix));
try
{
inputStream = new FileInputStream(file);
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
preview.setVisibility(View.GONE);
Bitmap bi;
bi = BitmapFactory.decodeStream(inputStream,null,null);
imageview.setImageBitmap(bi);
inputStream.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
}
Log.d(TAG, "onPictureTaken - jpeg");
}
};
PictureCallback rawCallback = new PictureCallback()
{
public void onPictureTaken(byte[] data, Camera camera)
{
Log.d(TAG, "onPictureTaken - raw");
}
};
ShutterCallback shutterCallback = new ShutterCallback()
{
public void onShutter()
{
Log.d(TAG, "onShutter'd");
}
};
}
2011.11.30 16:51:00
그건말이죠 파일 저장방식이 두가지가 있는데 자바의 파일 클래스 사용하는 것과
미디어스토어 클래스를 사용하는 방법이 있습니다.
미디어 스토어 클래스는 카메라 권한만 있으면 가능합니다.
대신 변경이 불가능 하지요.
자바의 파일클래스 사용으로 저장시에는 익스터널데이터쓰기권한 필요합니다.
- 이건 권한 안주면 에러도 안나고 그냥 실행만 안되지요
참고로 미디어스토어 사용한 파일 저장 소스입니다.
이걸로 해봐도 안되면 코드문제겠지요.
픽쳐테이큰속에 들어갑니다.
Bitmap cameraMap = BitmapFactory.decodeByteArray(data,
0, data.length, null);
MediaStore.Images.Media.insertImage(
getContentResolver(), cameraMap , "sample", null);




오류가 뭔가요.예를 들어 카메라가 안켜진다던지 - 매니페스트에 카메라 관련 권한 주셨는지요
파일 저장이 안된다던지 - 외부파일 쓰기 권한이랑요
잘될거 같은데요?