Android 호출 시스템 카메라 촬영 및 촬영 방법
많은 장면 에서 카메라 로 사진 이나 동 영상 을 찍 고 사진 이나 동 영상 을 바탕 으로 처리 해 야 한다.그러나 안 드 로 이 드 시스템 의 소스 코드 는 오픈 소스 이 고 많은 설비 업 체 들 이 사용 할 수 있 으 며 맞 춤 형 제작 이 혼 란 스 럽 습 니 다.일반적으로 카메라 로 사진 을 찍 거나 촬영 해 야 할 때 시스템 기 존의 카메라 애플 리 케 이 션 을 직접 호출 하여 사진 을 찍 거나 촬영 을 한다.우 리 는 촬영 결과 만 취하 여 처리 함으로써 서로 다른 장치 의 카메라 의 세부 적 인 문 제 를 피한다.이 블 로 그 는 안 드 로 이 드 애플 리 케 이 션 에서 기 존 카메라 애플 리 케 이 션 을 이용 해 사진 과 단편 영 화 를 촬영 하고 처리 하 는 방법 을 소개 하 며,마지막 으로 간단 한 데모 로 효 과 를 보 여 준다.
1.시스템 기 존 카메라 응용 호출
시스템 의 기 존 응용 을 어떻게 호출 하 는 지 에 대해 서 는 전에 설명 이 있 었 는데,여기 서 간단하게 다시 한 번 말씀 드 리 겠 습 니 다.개 발 된 애플 리 케 이 션 에서 시스템 기 존 애플 리 케 이 션 을 호출 하려 면 Intent 가 지정 한 애플 리 케 이 션 과 Category 를 사용 한 다음 startActivity(Intent)나 startActivity ForResult(Intent,int)를 통 해 지정 한 Activity 를 열 어야 합 니 다.startActivity ForResult()방법 으로 열 리 고 값 을 되 돌려 야 한다 면 onActivity Result(int,int,Intent)를 다시 쓰 면 됩 니 다.
시스템 기 존 카메라 에 적 용 된 AndroidManifest.xml 목록 파일 이 정의 하 는 Activity 를 살 펴 보 겠 습 니 다.
<activity
android:name="com.android.camera.Camera"
android:clearTaskOnLaunch="true"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="landscape"
android:taskAffinity="android.task.camera"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<categroy android:name="android.intent.category.DEFAULT" />
<categroy android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.media.action.IMAGE_CAPTURE" />
<categroy android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.media.action.STILL_IMAGE_CAMERA" />
<categroy android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.android.camera.VideoCamera"
android:clearTaskOnLaunch="true"
android:configChanges="origientation|keyboardHidden"
android:label="@string/video_camera_label"
android:screenOrientation="landscape"
android:taskAffinity="android.task.camcorder"
android:theme="@android:style/theme.Black.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.media.action.VIDEO_CAMERA" />
<categroy android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.media.action.VIDEO_CAPTURE" />
<categroy android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
이것 은 두 개의 Activity,com.android.camera.camera 는 카 메 라 를,com.android.camera.VideoCamera 는 카 메 라 를 정의 합 니 다.말 그대로 시스템 카메라 가 되 돌아 오 는 데 이 터 를 잡기 위해 서 는 보통 두 개의 Action 을 사용 하면 카메라 와 카 메 라 를 켤 수 있다.2,시스템 기 존 카메라 촬영 사진
기 존 카 메 라 를 켜 고 사진 을 찍 을 때 사용 해 야 할 MediaStore.ACTIONIMAGE_CAPTURE 는 Intent 의 action 으로 Activity 를 켜 면 됩 니 다.그러나 시스템 기 존 카 메 라 를 사용 할 때 기본적으로 그림 을 시스템 갤러리 디 렉 터 리 에 저장 합 니 다.그림 파일 의 저장 경 로 를 지정 하려 면 Intent 에 추가 로 설정 해 야 합 니 다.
시스템 기 존 카메라 에 적 용 된 사진 의 저장 경 로 를 설정 하려 면 Intent.putExtra()방법 으로 MediaStore.EXTRA 를 통과 해 야 합 니 다.OUTPUT 는 Intent 의 추가 데 이 터 를 설정 합 니 다.여기 서 전달 하 는 것 은 Uri 매개 변수 이 고 파일 경로 의 Uri 일 수 있 습 니 다.
Intent intent=new Intent();
// Action
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
//
File file=new File(FILE_PATH);
// Uri
Uri uri=Uri.fromFile(file);
//
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
3.시스템 기 존 카메라 가 촬영 한 사진 가 져 오기새로 열 린 Activity 에서 반환 값 을 가 져 오 려 면 startActivity ForResult(Intent,int)방법 으로 Activity 를 열 고 onActivity Result(int,int,Intent)를 다시 써 서 시스템 카메라 의 반환 데 이 터 를 가 져 와 야 합 니 다.그러면 우 리 는 onActivity Result()에서 반환 값 을 가 져 오 면 됩 니 다.
시스템 카메라 가 찍 은 사진 은 경 로 를 지정 하지 않 으 면 시스템 기본 폴 더 에 저장 되 며,Intent.getExtra()방법 으로 얻 을 수 있 으 며,콘 텐 츠 제공 자의 주 소 를 표시 하 는 Uri 주 소 를 얻 었 습 니 다.MediaStore.EXTRA 를 통 해OUTPUT 에서 저장 경 로 를 지정 하 였 습 니 다.그러면 Intent.getExtra()를 통 해 얻 은 것 은 빈 주소 가 될 것 입 니 다.하지만 우리 가 지정 한 주소 라면 찾 을 수 없 을 것 입 니 다.
4.시스템 기 존 카메라 촬영 이미지 데모
개발 한 애플 리 케 이 션 에서 시스템 카 메 라 를 이용 해 사진 을 찍 고 그 와 관련 된 내용 을 얻 는 방법 을 설명 하 였 으 며,다음은 간단 한 데모 로 보 여 드 리 겠 습 니 다.데모 에 서 는 두 개의 Button 이 각각 경 로 를 지정 하 는 방식 과 경 로 를 지정 하지 않 는 방식 으로 시스템 카 메 라 를 시작 하고 반환 값 을 가 져 와 ImageView 에 표시 합 니 다.데모 에 서 는 설명 이 상세 합 니 다.여 기 는 더 이상 설명 하지 않 습 니 다.
레이아웃 코드:activitysyscamera.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn_StartCamera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" -- SD " />
<Button
android:id="@+id/btn_StartCameraInGallery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" -- " />
<ImageView
android:id="@+id/iv_CameraImg"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
구현 코드:SysCameraActivity.java
package cn.bgxt.callsystemcamera;
import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class SysCameraActivity extends Activity {
private Button btn_StartCamera, btn_StartCameraInGallery;
private ImageView iv_CameraImg;
private static final String TAG = "main";
private static final String FILE_PATH = "/sdcard/syscamera.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_syscamera);
btn_StartCamera = (Button) findViewById(R.id.btn_StartCamera);
btn_StartCameraInGallery = (Button) findViewById(R.id.btn_StartCameraInGallery);
iv_CameraImg = (ImageView) findViewById(R.id.iv_CameraImg);
btn_StartCamera.setOnClickListener(click);
btn_StartCameraInGallery.setOnClickListener(click);
}
private View.OnClickListener click = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = null;
switch (v.getId()) {
//
case R.id.btn_StartCamera:
intent = new Intent();
// Action
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
//
File file = new File(FILE_PATH);
if (file.exists()) {
file.delete();
}
// Uri
Uri uri = Uri.fromFile(file);
//
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, 0);
break;
//
case R.id.btn_StartCameraInGallery:
intent = new Intent();
// Action
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivityForResult(intent, 1);
break;
default:
break;
}
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i(TAG, " ,resultCode="+resultCode);
if (requestCode == 0) {
File file = new File(FILE_PATH);
Uri uri = Uri.fromFile(file);
iv_CameraImg.setImageURI(uri);
} else if (requestCode == 1) {
Log.i(TAG, " content :"+data.getData());
iv_CameraImg.setImageURI(data.getData());
}
}
}
효과 표시:시스템 에 있 는 카메라 애플 리 케 이 션 을 호출 하여 촬영 한 그림 을 가 져 오 는 방법 을 간단하게 보 여 주 었 을 뿐 이미지 자원 을 회수 하지 않 았 기 때문에 메모리 가 넘 치 는 오류 가 있 을 수 있 습 니 다.다시 시작 하면 됩 니 다.
5.시스템 기 존 카메라 촬영 영상
시스템 기 존의 카메라 애플 리 케 이 션 에서 촬영 한 영상 을 가 져 오 는 것 은 촬영 한 사진 을 가 져 오 는 과정 과 대체적으로 같 지만 putExtra()를 통 해 MediaStore.EXTRA 를 설정 할 수 있 는 것 을 제외 하고OUTPUT 출력 경 로 를 제외 하고 다른 값 도 설정 할 수 있 습 니 다.여기 서 간단하게 소개 하 겠 습 니 다.
사진 을 찍 는 절차 와 마찬가지 로 여 기 는 더 이상 힘 들 게 말 하지 않 고 데모 로 바로 올 라 갑 니 다.데모 에 서 는 하나의 Button 을 통 해 기 존 카메라 로 영상 을 촬영 하 는 시스템 을 시작 해 SD 카드 에 저장 합 니 다.
구현 코드:
package cn.bgxt.callsystemcamera;
import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class SysVideoCameraActivity extends Activity {
private Button btn_StartVideoCamera;
private static final String FILE_PATH = "/sdcard/sysvideocamera.3gp";
private static final String TAG="main";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sysvideocamera);
btn_StartVideoCamera = (Button) findViewById(R.id.btn_StartVideoCamera);
btn_StartVideoCamera.setOnClickListener(click);
}
private View.OnClickListener click = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("android.media.action.VIDEO_CAPTURE");
intent.addCategory("android.intent.category.DEFAULT");
File file = new File(FILE_PATH);
if(file.exists()){
file.delete();
}
Uri uri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, 0);
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i(TAG, " ,resultCode="+requestCode);
}
}
효과 표시:원본 다운로드:Android 호출 시스템 카메라 사진 및 촬영
총결산
기 존 카메라 애플 리 케 이 션 을 어떻게 사용 하 는 지,사진 과 동 영상 을 찍 는 지 설명 하 겠 습 니 다.카메라 가 아 닌 프로젝트 에 서 는 사진 을 찍 어야 한다 면 기 존 카메라 애플 리 케 이 션 을 호출 하 는 것 이 일반적 이 며,카메라 하드웨어 를 직접 호출 하여 이미 지 를 가 져 오 는 것 이 아 닙 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.