728x90
이번 시간에는 내가 만든 앱에서 camera 어플을 사용하여 사진을 찍고
image view 에 띄우는 것까지 진행해보겠습니다.
먼저 스틱코드에서 아래 링크된 코드를 즐겨찾기 해주세요
https://stickode.com/detail.html?no=2211
스틱코드에서 필요한 코드들을 즐겨찾기 해놓으면
태그만 입력해서 코든 전체를 한번에 불러올 수 있습니다.
아래 사진들을 보시면 태그만 입력해도 포스팅 제목이 보이죠?
클릭하면 코드 전체가 입력됩니다.
1. MainActivity.java
package com.example.camera_ex;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
public class MainActivity extends AppCompatActivity {
final private static String TAG = "tag";
Button btn_photo;
ImageView iv_photo;
final static int TAKE_PICTURE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_photo = findViewById(R.id.iv_photo);
btn_photo = findViewById(R.id.btn_photo);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "권한 설정 완료");
} else {
Log.d(TAG, "권한 설정 요청");
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
}
btn_photo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_photo:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, TAKE_PICTURE);
break;
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
switch (requestCode) {
case TAKE_PICTURE:
if (resultCode == RESULT_OK && intent.hasExtra("data")) {
Bitmap bitmap = (Bitmap) intent.getExtras().get("data");
if (bitmap != null) {
iv_photo.setImageBitmap(bitmap);
}
}
break;
}
}
}
내가 만든 앱과 카메라 앱이 따로 있는데 어떻게 구현이 되는 걸까요?
이해를 돕기 위하여 일단 순서만 생각해본다면
내가 만든 앱에서 카메라 앱을 호출하고
카메라 촬영을 하고
그 결과물을 다시 내가 만든 앱으로 가져와야 합니다.
이를 위해 사용 하는 것이
startActivityForResult입니다.
예제에서는 버튼을 눌렀을 때 작동하도록 구현되어있죠.
startActivity 메소드는 할 수 없었던 ‘결과값 가져오기’를 가능하게 해주죠
그래서 파라미터에 ‘요청코드’가 추가됩니다.
예제에서는 TAKE_PICTURE 변수로 만들어 놨죠
이 요청코드는 어떤 명령을 수행하고 있는지 식별해주는 것이라고 보면 됩니다.
2. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/iv_photo"
android:layout_width="match_parent"
android:layout_height="522dp" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_photo"
android:text="사진찍기"
android:background="#708090"/>
</LinearLayout>
3. AndroidManifest.xml
매니페스트에서 아래와 같이 권한을 추가합니다.
'안드로이드 자바' 카테고리의 다른 글
[Java][Android] 원하는 시간에 알림 받기 (0) | 2021.07.17 |
---|---|
[Java][Android] 안드로이드 - 프래그먼트에 카드뷰, 리사이클러뷰만들기 (0) | 2021.07.15 |
[Java][Android] OpenCV 를 사용해서 이미지 외곽선을 따는 기능을 만들어 보자 (0) | 2021.07.09 |
[Java][Android] MLKit를 이용한 텍스트 인식 (6) | 2021.07.07 |
[JAVA][Android] 윈도우 오버레이 (2) | 2021.07.06 |