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>
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);새로 열 린 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>
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에 따라 라이센스가 부여됩니다.