Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidでプログラムからカメラを起動して写真を撮影する方法を解説

このチュートリアルでは、Androidアプリでボタンをタップした際にプログラムからカメラを起動し、撮影した写真を画面に表示する方法を解説します。実行時パーミッションのリクエストから撮影結果の表示まで、一連の流れをステップごとに紹介します。

ステップ1:新規プロジェクトの作成

Android Studioで新しいプロジェクトを作成します。メニューから「File」⇒「New Project」を選択し、必要な項目を入力してプロジェクトを作成しましょう。

ステップ2:レイアウトファイルの作成

以下のコードを res/layout/activity_main.xml に追加します。撮影した写真を表示するImageViewと、カメラを起動するButtonを配置したシンプルなレイアウトです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:gravity="center_horizontal"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click the below button to take photo from camera"/>
    <ImageView
        android:id="@+id/imageView"
        android:scaleType="centerCrop"
        android:layout_width="300dp"
        android:layout_height="400dp"
        android:src="@drawable/ic_image_black"
        android:layout_marginTop="16dp"/>
    <Button
        android:id="@+id/btnCaptureImage"
        android:text="Capture Image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

ステップ3:MainActivity.javaの実装

以下のコードを src/MainActivity.java に追加します。このコードでは、Android 6.0(API 23)以降で必須となるカメラおよび外部ストレージの実行時パーミッションのチェックとリクエスト、MediaStoreへの画像保存用URIの作成、カメラアプリの起動、そして撮影結果をImageViewに表示する処理を実装しています。

import android.Manifest;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private static final int PERMISSION_CODE = 1000;
    private static final int IMAGE_CAPTURE_CODE = 1001;
    Button mCaptureBtn;
    ImageView mImageView;
    Uri imageUri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mImageView = findViewById(R.id.imageView);
        mCaptureBtn = findViewById(R.id.btnCaptureImage);

        mCaptureBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED) {
                        String[] permission = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
                        requestPermissions(permission, PERMISSION_CODE);
                    } else {
                        openCamera();
                    }
                }
            }
        });
    }

    private void openCamera() {
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.TITLE, "New Picture");
        values.put(MediaStore.Images.Media.DESCRIPTION, "From the Camera");
        imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

        Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(cameraIntent, IMAGE_CAPTURE_CODE);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_CODE: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    openCamera();
                } else {
                    Toast.makeText(this, "Permission denied...", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == IMAGE_CAPTURE_CODE && resultCode == RESULT_OK) {
            mImageView.setImageURI(imageUri);
        }
    }
}

ステップ4:AndroidManifest.xmlへのパーミッション宣言

カメラと外部ストレージへのアクセスには、マニフェストへのパーミッション宣言が必要です。以下のコードを androidManifest.xml に追加してください。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

アプリの実行と動作確認

それではアプリを実行してみましょう。ここでは、Android端末をパソコンに接続していることを前提としています。Android Studioからアプリを起動するには、プロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。実行する端末を選択すると、接続した端末にアプリの初期画面が表示されます。

Androidでプログラムからカメラを起動して写真を撮影する方法を解説

Androidでプログラムからカメラを起動して写真を撮影する方法を解説

Androidでプログラムからカメラを起動して写真を撮影する方法を解説

  1. Androidアプリでプログラムから着信に自動応答する方法を解説

    この記事では、Androidアプリケーションからプログラムによって着信に自動応答する方法を、サンプルコードとともに段階的に解説します。電話機能を持つアプリや自動応答システムを開発したい方に役立つ内容です。 手順1:Android Studioで新規プロジェクトを作成する まず、Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。 手順2:レイアウトファイル(activity_main.xml)を編集する res/layout/activity_main.xml に以下のコードを

  2. 【Android】プログラムでアプリケーションを終了する方法|finish()とSystem.exit(0)の使い方

    はじめにこの記事では、Androidアプリをプログラム(コード)から終了させる方法を解説します。ボタンをタップするとアプリが終了するシンプルなサンプルアプリを通じて、実装手順をステップごとに見ていきましょう。ステップ1:新規プロジェクトの作成Android Studioを起動し、「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。ステップ2:レイアウトファイルの編集res/layout/activity_main.xml に以下のコードを追加します。このレイアウトには、ガイダンス用のTextViewと、アプリを終了するためのB