안드로이드 Camera 사용하기 - Intent편
안드로이드 Camera 사용하기 - Intent편
- 안드로이드에서 카메라를 사용하는 방법은 크게 2가지가 있습니다.
- 첫번째는 Intent를 사용하여 안드로이드에서 기본적으로 제공해주는 카메라를 이용하는 방법입니다.
- 두번째는 Surfaceview로 프리뷰를 띄운후 자신에게 맞게 커스텀해서 사용하는 방법입니다.
- 이번글에서는 역시 사용하기 쉬운 Intent를 먼저 하겠습니다.
- Surfaceview도 기본예제만 사용하면 어렵지는 않으나 원하는대로 만들기는 난이도가 꽤 높습니다.
- 이번 Intent는 사실 이와 연결되는 File이나 Image처리 관련글을 써보기 위해서 작성해봅니다.
- 사용하는건 쉬우나 Image처리가 골치 아프죠..
먼저 사진찍을 버튼 1개와
찍은 사진을 보여준 ImageView 1개를
배치하겠습니다.
[activity_main.xml]
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv"
android:layout_width="300dp"
android:layout_height="300dp" />
<Button
android:id="@+id/btn"
android:text="찍자"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
[MainActivity.java]
public class MainActivity extends Activity
{
Button btn = null;
ImageView iv = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setup();
}
private void setup()
{
btn = (Button)findViewById(R.id.btn);
iv = (ImageView)findViewById(R.id.iv);
}
}
그 다음 버튼을 누르면
카메라를 실행시키기 위해서
딱 2줄만 추가시키면 됩니다.
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);
}
});
코드 설명할 것도 없이
인텐트는 다들 잘 아실꺼고
MediaStore.ACTION_IMAGE_CAPTURE는
MediaStore 레퍼런스 키면 바로
ACTION_IMAGE_CAPTURE가 눈에 보입니다.
뭐 영어는 못하지만 대충 해석하면
카메라 어플리케이션이 캡쳐를 해서 이미지를
리턴할수 있는 표준 동작이라는 뜻입니다.
여기까지만 입력하고
앱을 실행시키면
카메라 작동 잘~ 됩니다
폰이 구려서
사진은 잘 안나오지만
작동은 잘됩니다.
딱 2줄 추가했을뿐인데
저장 누르면 갤러리에
저장도 잘됩니다.
결국은 카메라에
관련된 내용은
여기까지고
나머지는
File이나
이미지처리입니다
이제
onActivityResult를
추가해줍니다.
얼마전에 단축키 관련해서
썼던 글에 나왔던 내용인데
Alt+Insert키를 누른후
Override Methods...를
눌러줍니다.
누른후에
onAc정도 쓰시면
바로 검색이 되는데
클릭해주면 됩니다.
가져왔으면
이제 최종코드를
보겠습니다.
public class MainActivity extends Activity
{
Button btn = null;
ImageView iv = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setup();
}
private void setup()
{
btn = (Button)findViewById(R.id.btn);
iv = (ImageView)findViewById(R.id.iv);
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
iv.setImageURI(data.getData());
}
}
intent 결과값을
onActivityResult에서
처리할 수 있습니다.
data.getData()를
사용해서 방금사진찍은
Uri를 가져옵니다.
여기까지 하고
마지막으로 manifest를
한줄 추가합니다.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
여기까지가
찍은 사진을
아무~ 처리 없이
가져오는 과정입니다.
메모리부족, 사진크기
사진이 돌아간것(회전)
등등 전부...
사실 카메라 부분은
Image처리부분이
꽃입니다. 후후
이와 관련된 내용은
Image 카테고리에서
자세히 다뤄보도록
하겠습니다.
대충 이렇게 나옵니다
아마 여기서도
용량이 큰 사진은
Out of memory로
앱이 죽을 수 있습니다.