안드로이드 개발 질문/답변
(글 수 45,052)
public class CamView extends Activity implements SurfaceHolder.Callback
{
public String szDateTop ="";
private Camera camera = null;
private boolean isPreviewRunning = false;
private SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
static final String TAG= "CamView";
static final String[] IMAGE_PROJECTION = {
MediaStore.Images.ImageColumns.DATA,
MediaStore.Images.ImageColumns.DATE_TAKEN
};
Bitmap bm = null;
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
Activity activit = this;
activit.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Log.e(getClass().getSimpleName(), "onCreate");
getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.main);
surfaceView = (SurfaceView)findViewById(R.id.surface);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
findViewById(R.id.main_btn_picture).setOnClickListener(mClickListener);
findViewById(R.id.main_btn_repicture).setOnClickListener(mClickListener);
findViewById(R.id.main_btn_send).setOnClickListener(mClickListener);
// BackRunnable runnable = new BackRunnable();
// Thread thread = new Thread(runnable);
// thread.setDaemon(true); //메인 쓰레드가 종료될 때 강제로 종료되는 쓰레드
// thread.start();
}
public boolean onCreateOptionsMenu(android.view.Menu menu) {
MenuItem item = menu.add(0, 0, 0, "View Pictures");
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
Intent act_showvideo = new Intent(CamView.this, Image_List.class);
startActivity(act_showvideo);
// Intent intent = new Intent(Intent.ACTION_VIEW, targetResource); // 저장된 이미지들을 모두 보여준다.
// startActivity(intent);
return true;
}
});
return true;
}
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
}
Camera.PictureCallback mPictureCallbackRaw = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera c) {
camera.startPreview();
}
};
Camera.ShutterCallback mShutterCallback = new Camera.ShutterCallback() {
public void onShutter() {
}
};
public boolean onKeyDown(int keyCode, KeyEvent event)
{
Image_Picture camDemo = null;
if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
try {
String filename = timeStampFormat.format(new Date());
ContentValues values = new ContentValues();
values.put(Media.TITLE, filename);
values.put(Media.DESCRIPTION, "Image from Android Emulator");
Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
camDemo = new Image_Picture( getContentResolver().openOutputStream(uri));
} catch(Exception ex ){
}
}
if (keyCode == KeyEvent.KEYCODE_BACK) {
return super.onKeyDown(keyCode, event);
}
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
camera.takePicture(mShutterCallback, mPictureCallbackRaw, camDemo);
return true;
}
return false;
}
protected void onResume()
{
Log.e(getClass().getSimpleName(), "onResume");
super.onResume();
}
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
}
protected void onStop()
{
super.onStop();
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
{
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
camera.startPreview();
if (isPreviewRunning) {
camera.stopPreview();
}
Camera.Parameters p = camera.getParameters();
p.setPreviewSize(w, h);
camera.setParameters(p);
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
camera.startPreview();
isPreviewRunning = true;
}
/* (non-Javadoc)
* @see android.view.SurfaceHolder.Callback#surfaceCreated(android.view.SurfaceHolder)
*/
public void surfaceCreated(SurfaceHolder holder)
{
camera = Camera.open();
camera.getParameters().setRotation(90);
}
public void surfaceDestroyed(SurfaceHolder holder)
{
camera.stopPreview();
isPreviewRunning = false;
camera.release();
}
public boolean capture(Camera.PictureCallback jpegHandler){
if(camera != null){
camera.takePicture(null, null, jpegHandler);
return true;
}
else{
return false;
}
}
Button.OnClickListener mClickListener = new View.OnClickListener() {
public void onClick(View v){
switch(v.getId()){
case R.id.main_btn_send:
if(bm != null){
try {
String fileUrl = MediaStore.Images.Media.insertImage(getContentResolver(), bm, "111", "222");
if (fileUrl == null) {
// Log.d("Still", "Image Insert failed");
return;
} else {
// Force the media scanner to go. Not required,
// but good for testing.
Uri picUri = Uri.parse(fileUrl);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, picUri));
}
} catch (Exception e) {
//Log.e("Still", "Error writing file", e);
}
bm = null;
getImageArray(CamView.this, mClickListener);
Intent act_showvideo = new Intent(CamView.this, Image_Transmit.class);
act_showvideo.putExtra("Imgae_Path", szDateTop);
startActivity(act_showvideo);
finish();
// String result = "";
// MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
// HttpClient client = new HttpClient(connectionManager);
// File f = new File("/sdcard/DCIM/Camera/1283412323927.jpg");
// PostMethod filePost = new PostMethod("");
// int nStatusCode =0 ;
// try {
// Part[] parts = {
// new StringPart("originalPath","/sdcard/DCIM/Camera/1283412323927.jpg"),
// new FilePart("fileData", "1283412323927.jpg", f) //new FilePart("attfile01",f.getName(), f,null,"UTF-8")
//
// };
//
//
// filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
// client.executeMethod(filePost);
//
// result = filePost.getResponseBodyAsString();
// /*
// logger.debug("##########fileUpload##############");
// logger.debug("filePost.getResponseCharSet()="+filePost.getResponseCharSet()); //UTF-8
// logger.debug("filePost.getStatusCode()="+filePost.getStatusCode()); // 200
// logger.debug("filePost.getStatusText()="+filePost.getStatusText()); // OK
// logger.debug("filePost.getStatusLine()="+filePost.getStatusLine()); // HTTP/1.1 200 OK
// logger.debug("filePost.getResponseBodyAsString() \n "+filePost.getResponseBodyAsString());
// logger.debug("##########fileUpload##############");
// */
// //return nStausCode;
// //return result;
// } catch (HttpException e) {
//
// //Log.i(TAG,"file upload fail 1");
// e.printStackTrace();
// } catch (IOException e) {
//
// //Log.i(TAG,"file upload fail 2");
// e.printStackTrace();
// } finally {
// nStatusCode = filePost.getStatusCode();
// filePost.releaseConnection();
// }
// NetUtil net = new NetUtil();
// String[] tmpstr = null;
// tmpstr = szDateTop.split("/");
//
// String file=tmpstr[4];
//
// try {
// net.fileUpload("http://", szDateTop, file);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// Toast.makeText(CamView.this, "fail", Toast.LENGTH_SHORT).show();
// }
//1283412323927.jpg
//Toast.makeText(CamView.this, "true", Toast.LENGTH_SHORT).show();
}
else{}
break;
case R.id.main_btn_picture:
capture(new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// Log.v("Still", "Image data received from camera");
bm = BitmapFactory.decodeByteArray(data, 0, data.length);
}
});
break;
case R.id.main_btn_repicture:
camera.startPreview();
isPreviewRunning = true;
bm = null;
//camera.takePicture(mShutterCallback, mPictureCallbackRaw, camDemo);
break;
}
}
};
public final ArrayList<String> getImageArray(final Context context, OnClickListener onClickListener)
{
final Uri uriImages = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
final ContentResolver cr = context.getContentResolver();
ArrayList<String> listPhoto = new ArrayList<String>();
try{
final Cursor cursorImages = cr.query(uriImages, IMAGE_PROJECTION, null, null, null);
//final Cursor cursorImages = cr.query(uriImages, IMAGE_PROJECTION, null, null, "title ASC");
if(cursorImages != null && cursorImages.moveToFirst()){
do{
szDateTop = cursorImages.getString(0);
//String photoPath = cursorImages.getString(0);
//String photoDate = cursorImages.getString(1);
//Log.i(TAG, szDateTop);
//Log.i(TAG, photoPath);
//Log.i(TAG, photoDate);
}while(cursorImages.moveToNext());
cursorImages.close();
}
}catch(Exception e){
}
return listPhoto;
}
}
갤럭시A에서는 가로 세로 정방향으로 다 문제 없구요
현재 카메라 구동소스 인데요, 갤럭스S에서 문제가 발생합니다.
세로 모드로 했을 때는 화면은 나오는데 90도 회전이 되서 나오구요.
가로모드로 했을 때는 화면이 멈추어서 움직이지 않습니다. 그런데 찍으면 제대로 된 화면이 출력되더라구요.
세로모드 일 때 camera.getParameters().setRotation(90); 써서 카메라를 돌려볼려고 하는데 돌아가지 안습니다.
저는 세로 모드로 구현했으면 좋겠거든요. 카메라좀 돌아가게할 수 있는 방법이 있나요??
안되면 가로모드로 구현하는 방법도 괜찮습니다.
답변좀 부탁드리요!



