Android-카메라

애플리케이션에서 카메라를 사용할 수있는 두 가지 방법은 다음과 같습니다.

  • 애플리케이션에서 기존 Android 카메라 애플리케이션 사용

  • Android에서 제공하는 Camera API를 앱에서 직접 사용

애플리케이션에서 기존 Android 카메라 애플리케이션 사용

MediaStore.ACTION_IMAGE_CAPTURE를 사용하여 휴대폰에 설치된 기존 카메라 애플리케이션을 시작합니다. 구문은 다음과 같습니다.

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

위와 별도로 MediaStore에서 제공하는 다른 사용 가능한 인 텐트가 있습니다. 다음과 같이 나열됩니다.

Sr. 아니요 의도 유형 및 설명
1

ACTION_IMAGE_CAPTURE_SECURE

장치가 보안되면 카메라에서 캡처 한 이미지를 반환합니다.

2

ACTION_VIDEO_CAPTURE

Android의 기존 비디오 응용 프로그램을 호출하여 비디오를 캡처합니다.

EXTRA_SCREEN_ORIENTATION

화면 방향을 세로 또는 가로로 설정하는 데 사용됩니다.

4

EXTRA_FULL_SCREEN

ViewImage의 사용자 인터페이스를 제어하는 ​​데 사용됩니다.

5

INTENT_ACTION_VIDEO_CAMERA

이 인 텐트는 비디오 모드에서 카메라를 시작하는 데 사용됩니다.

6

EXTRA_SIZE_LIMIT

비디오 또는 이미지 캡처 크기의 크기 제한을 지정하는 데 사용됩니다.

이제 startActivityForResult () 함수를 사용 하여이 활동을 시작하고 결과를 기다립니다. 구문은 다음과 같습니다.

startActivityForResult(intent,0)

이 방법은 activity수업. 우리는 그것을 주요 활동에서 부르고 있습니다. 동일한 작업을 수행하지만 활동에서 호출하지 않고 다른 곳에서 호출 할 때 사용되는 활동 클래스에 정의 된 메소드가 있습니다. 아래에 나열되어 있습니다.

Sr. 아니요 활동 기능 설명
1

startActivityForResult(Intent intent, int requestCode, Bundle options)

활동을 시작하지만 추가 옵션 번들을 사용할 수 있습니다.

2

startActivityFromChild(Activity child, Intent intent, int requestCode)

활동이 다른 활동의 하위 일 때 활동을 시작합니다.

startActivityFromChild(Activity child, Intent intent, int requestCode, Bundle options)

위와 동일하게 작동하지만 번들 형태로 추가 값을 취할 수 있습니다.

4

startActivityFromFragment(Fragment fragment, Intent intent, int requestCode)

현재 내부에있는 조각에서 활동을 시작합니다.

5

startActivityFromFragment(Fragment fragment, Intent intent, int requestCode, Bundle options)

조각에서 활동을 시작할뿐만 아니라 추가 값을 가져올 수 있습니다.

활동을 시작하는 데 사용한 함수에 관계없이 모두 결과를 반환합니다. 결과는 onActivityResult 함수를 재정 의하여 얻을 수 있습니다 .

다음은 기존 카메라 애플리케이션을 시작하여 이미지를 캡처하고 결과를 비트 맵 형식으로 표시하는 방법을 보여주는 예입니다.

이 예제를 실험하려면 카메라가 지원되는 실제 기기에서 실행해야합니다.

단계 기술
1 Android 스튜디오 IDE를 사용하여 Android 애플리케이션을 만들고 com.example.sairamkrishna.myapplication에서 Camera로 이름을 지정합니다.
2 src / MainActivity.java 파일을 수정하여 카메라를 시작하는 의도 코드를 추가합니다.
레이아웃 XML 파일 res / layout / activity_main.xml 수정
4 카메라 권한을 추가하고 애플리케이션을 실행하고 실행중인 Android 기기를 선택하고 여기에 애플리케이션을 설치하고 결과를 확인합니다.

다음은 수정 된 주요 활동 파일의 내용입니다. src/MainActivity.java.

package com.example.sairamkrishna.myapplication;

import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;

import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;

import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

public class MainActivity extends AppCompatActivity {
   public static final int MY_PERMISSIONS_REQUEST_CAMERA = 100;
   public static final String ALLOW_KEY = "ALLOWED";
   public static final String CAMERA_PREF = "camera_pref";

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
         if (getFromPref(this, ALLOW_KEY)) {
            showSettingsAlert();
         } else if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.CAMERA)
            
            != PackageManager.PERMISSION_GRANTED) {
               
               // Should we show an explanation?
               if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                  Manifest.permission.CAMERA)) {
                  showAlert();
               } else {
                  // No explanation needed, we can request the permission.
                  ActivityCompat.requestPermissions(this,
                     new String[]{Manifest.permission.CAMERA},
                     MY_PERMISSIONS_REQUEST_CAMERA);
               }
            }
      } else {
         openCamera();
      }
      
   }
   public static void saveToPreferences(Context context, String key, Boolean allowed) {
      SharedPreferences myPrefs = context.getSharedPreferences(CAMERA_PREF, 
         Context.MODE_PRIVATE);
      SharedPreferences.Editor prefsEditor = myPrefs.edit();
      prefsEditor.putBoolean(key, allowed);
      prefsEditor.commit();
   }
		
   public static Boolean getFromPref(Context context, String key) {
      SharedPreferences myPrefs = context.getSharedPreferences(CAMERA_PREF, 
         Context.MODE_PRIVATE);
      return (myPrefs.getBoolean(key, false));
   }
		
   private void showAlert() {
      AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
      alertDialog.setTitle("Alert");
      alertDialog.setMessage("App needs to access the Camera.");
      
      alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "DONT ALLOW",
         new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
               dialog.dismiss();
               finish();
            }
      });
			
      alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "ALLOW",
         new DialogInterface.OnClickListener() {
         
            public void onClick(DialogInterface dialog, int which) {
               dialog.dismiss();
               ActivityCompat.requestPermissions(MainActivity.this,
               new String[]{Manifest.permission.CAMERA},
               MY_PERMISSIONS_REQUEST_CAMERA);
            }
      });
      alertDialog.show();
   }
		
   private void showSettingsAlert() {
      AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
      alertDialog.setTitle("Alert");
      alertDialog.setMessage("App needs to access the Camera.");
      
      alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "DONT ALLOW",
         new DialogInterface.OnClickListener() {
         
            public void onClick(DialogInterface dialog, int which) {
               dialog.dismiss();
               //finish();
            }
      });
			
      alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "SETTINGS",
         new DialogInterface.OnClickListener() {
                    
            public void onClick(DialogInterface dialog, int which) {
               dialog.dismiss();
               startInstalledAppDetailsActivity(MainActivity.this);
            }
      });
			
      alertDialog.show();
   }
		
   @Override
   public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
      switch (requestCode) {
         case MY_PERMISSIONS_REQUEST_CAMERA: {
            for (int i = 0, len = permissions.length; i < len; i++) {
               String permission = permissions[i];
            
               if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
                  boolean 
                  showRationale = 
                     ActivityCompat.shouldShowRequestPermissionRationale(
                     this, permission);
                  
                  if (showRationale) {
                     showAlert();
                  } else if (!showRationale) {
                     // user denied flagging NEVER ASK AGAIN
                     // you can either enable some fall back,
                     // disable features of your app
                     // or open another dialog explaining
                     // again the permission and directing to
                     // the app setting
                     saveToPreferences(MainActivity.this, ALLOW_KEY, true);
                  }
               }
            }
         }
         
         // other 'case' lines to check for other
         // permissions this app might request
      }
   }
		
   @Override
   protected void onResume() {
      super.onResume();
   }
		
   public static void startInstalledAppDetailsActivity(final Activity context) {
      if (context == null) {
         return;
      }
			
      final Intent i = new Intent();
      i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
      i.addCategory(Intent.CATEGORY_DEFAULT);
      i.setData(Uri.parse("package:" + context.getPackageName()));
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
      i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
      context.startActivity(i);
   }
		
   private void openCamera() {
      Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
      startActivity(intent);
   }
}

다음 내용은 res/layout/activity_main.xml file

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
</RelativeLayout>

다음 내용은 res/values/strings.xml 하나의 새로운 상수를 정의하려면

<resources>
   <string name="app_name">My Application</string>
</resources>

다음은의 기본 콘텐츠입니다. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
  <uses-permission android:name="android.permission.CAMERA" />
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.sairamkrishna.myapplication.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
     </activity>
     
   </application>
</manifest>

애플리케이션을 실행 해 보겠습니다. 실제 Android 모바일 장치를 컴퓨터에 연결했다고 가정합니다. Android 스튜디오에서 앱을 실행하려면 프로젝트의 활동 파일 중 하나를 열고

도구 모음에서 실행 아이콘을 클릭 합니다. 애플리케이션을 시작하기 전에 Android 스튜디오는 Android 애플리케이션을 실행할 옵션을 선택하는 다음 창을 표시합니다.

옵션으로 모바일 장치를 선택한 다음 카메라를 열고 다음 화면을 표시하는 모바일 장치를 확인하십시오-