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

Androidアプリでカメラを操作する方法を徹底解説【サンプルコード付き】

Androidアプリでカメラを操作する方法とは?

本記事では、Androidアプリからカメラを起動し、撮影した写真を画面に表示するまでの一連の手順を、サンプルコード付きでわかりやすく解説します。Android Studioを使った基本的な開発経験があれば、初心者の方でもスムーズに実装できる内容です。

このサンプルで作れるもの

今回紹介するサンプルアプリは、以下の動作を行います。

  • ボタンをタップすると標準カメラアプリが起動する
  • 撮影した写真をBitmapとして受け取る
  • 受け取った画像をImageViewに表示する

カメラの直接制御には複雑なCamera APIが必要ですが、このサンプルではIntent(ACTION_IMAGE_CAPTURE)を使って標準カメラアプリを呼び出すシンプルな手法を採用しています。そのため、少ないコード量で手軽にカメラ機能を組み込めるのが大きなメリットです。

Step 1:Android Studioで新規プロジェクトを作成

まずはAndroid Studioを開き、メニューから「File」⇒「New Project」を選択します。必要な項目(アプリ名、パッケージ名、保存先など)を入力して、新しいプロジェクトを作成しましょう。テンプレートは「Empty Activity」で問題ありません。

Step 2:レイアウトファイル(activity_main.xml)にコードを追加

次に、res/layout/activity_main.xmlに以下のコードを記述します。画面下部中央に「Take a Photo(写真を撮る)」ボタンを配置し、その上部いっぱいに撮影画像を表示するImageViewを設置しています。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
   xmlns:app="https://schemas.android.com/apk/res-auto"
   xmlns:tools="https://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity">
   <Button
      android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentBottom="true"
      android:layout_centerHorizontal="true"
      android:text="Take a Photo" >
   </Button>
   <ImageView
      android:id="@+id/imageView1"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_above="@+id/button1"
      android:layout_alignParentTop="true"
      >
   </ImageView>
</RelativeLayout>

Step 3:MainActivity.java にカメラ処理を実装

続いて、src/MainActivity.javaに以下のコードを追加します。ポイントは次の2つです。

  • ボタンクリック時にACTION_IMAGE_CAPTUREのIntentを発行し、startActivityForResult()でカメラアプリを起動する
  • 撮影完了後、onActivityResult()で戻り値からBitmapを取り出し、ImageViewにセットする
package com.example.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
   private static final int CAMERA_REQUEST=1888;
   ImageView imageView;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      imageView=(ImageView) this.findViewById(R.id.imageView1);
      Button photoButton=(Button) this.findViewById(R.id.button1);
      photoButton.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent cameraIntent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);
         }
      });
   }
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (requestCode == CAMERA_REQUEST) {
         Bitmap photo=(Bitmap) data.getExtras().get("data");
         imageView.setImageBitmap(photo);
      }
   }
}

Step 4:AndroidManifest.xml を確認・編集

最後に、Manifests/AndroidManifest.xmlに以下のコードを記述します。標準カメラアプリをIntent経由で呼び出す場合はCAMERA権限の宣言が不要ですが、MainActivityがランチャーアクティビティとして正しく登録されていることを必ず確認してください。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.myapplication">
   <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スマートフォンをパソコンにUSB接続した状態で、Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。デバイス選択ダイアログで接続した端末を選んで実行すると、スマートフォン側に以下のような初期画面が表示されます。

Androidアプリでカメラを操作する方法を徹底解説【サンプルコード付き】

「Take a Photo」ボタンをタップするとカメラが起動し、撮影した画像が画面に表示されます。

Androidアプリでカメラを操作する方法を徹底解説【サンプルコード付き】

知っておくと便利な補足ポイント

  • 画像サイズについて:ACTION_IMAGE_CAPTUREで取得できる画像はサムネイル相当の低解像度データです。フルサイズで保存したい場合は、FileProviderと組み合わせて保存先のURIをIntentに渡す方法を採用してください。
  • 最新の実装方法:近年のAndroid開発では、非推奨となったstartActivityForResult()の代わりに、Activity Result API(registerForActivityResult)を使用することが公式に推奨されています。新規開発ではこちらの利用も検討しましょう。
  • 動作確認:エミュレータでもカメラ機能をテストできますが、実際の撮影挙動を確認するなら実機での検証がおすすめです。

以上、Androidアプリでカメラを操作する基本的手順を解説しました。Intentによるシンプルな実装から始めて、徐々に高度なカメラ機能にも挑戦してみてください。

  1. 【Android】リアカメラで自撮り写真を撮る5つの方法|タイマー設定からGoogleアシスタントまで

    Androidのインカメラ(フロントカメラ)を使う最大のメリットは、ポーズを確認しながら撮影できたり、全員がフレームに収まっているかチェックできる点です。一方でデメリットとして、アウトカメラ(リアカメラ)より解像度が低いという点が挙げられます。最近のスマートフォンの多くは高解像度の自撮りが可能ですが、リアカメラならではの高画質を求めるなら、以下の方法を試してみてください。Androidのリアカメラを使って、意外と簡単に自撮りができます。 方法1:試行方法1:試行錯誤しながら撮影する 最もシンプルな方法は、ベストな構図を予測して、試行錯誤を重ねながら撮影することです。まず一枚撮影し、仕上が

  2. Androidでカメラのシャッター音を無効化する2つの方法【root化必須】

    Androidスマートフォンで写真を撮影すると、シャッター音が鳴り、写真が正常に撮影されたことを知らせてくれます。この音自体はそれほど大きいものではありませんが、赤ちゃんなど、音に敏感な被写体を撮影する際には気になる存在です。わずかな物音でも影響を受ける繊細な被写体を撮る写真家にとって、シャッター音は実際に大きな問題となり得ます。 残念ながら、多くのAndroid端末の標準カメラアプリには、シャッター音をオフにする設定項目が用意されていません。しかし、サードパーティ製のツールを活用すれば、シャッター音を無効化し、静寂を破ることなく自由に撮影することが可能です。ここでは、その代表的な2つの方法