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

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

Kotlinを使えば、Androidアプリから手軽にカメラを操作できます。この記事では、ボタンをタップしてカメラを起動し、撮影した写真を画面に表示するサンプルアプリを題材に、実装手順をステップごとにわかりやすく解説します。

作成するアプリの概要

今回作成するのは、次のような動作をするシンプルなカメラアプリです。

  • 「Take a Photo」ボタンをタップすると標準カメラが起動する
  • 撮影した画像がアプリ画面のImageViewに表示される
  • 初回起動時にカメラ権限をリクエストする

ステップ1:Android Studioで新規プロジェクトを作成する

Android Studioを起動し、「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。使用言語はKotlinを選択してください。

ステップ2:レイアウトファイル(activity_main.xml)を編集する

res/layout/activity_main.xml に以下のコードを追加します。画面下部の中央に撮影用ボタンを配置し、その上部いっぱいに撮影結果を表示するImageViewを設置しています。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="Take a Photo" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/button"
        android:layout_alignParentTop="true" />

</RelativeLayout>

ステップ3:MainActivity.ktにカメラ処理を実装する

src/MainActivity.kt に以下のコードを記述します。実装のポイントは次の3つです。

  • 権限チェック:ContextCompat.checkSelfPermission() でカメラ権限の状態を確認し、未許可の場合は requestPermissions() で許可ダイアログを表示します。
  • カメラの起動:MediaStore.ACTION_IMAGE_CAPTURE を指定したIntentで、端末の標準カメラアプリを呼び出します。
  • 結果の受け取り:onActivityResult() で撮影されたBitmapを取得し、setImageBitmap() でImageViewに表示します。
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.os.Bundle
import android.provider.MediaStore
import android.widget.Button
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat

class MainActivity : AppCompatActivity() {

    private val cameraRequest = 1888
    lateinit var imageView: ImageView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        // カメラ権限が許可されていない場合はリクエストする
        if (ContextCompat.checkSelfPermission(applicationContext, Manifest.permission.CAMERA)
            == PackageManager.PERMISSION_DENIED
        ) {
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA), cameraRequest)
        }

        imageView = findViewById(R.id.imageView)
        val photoButton: Button = findViewById(R.id.button)

        photoButton.setOnClickListener {
            val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
            startActivityForResult(cameraIntent, cameraRequest)
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == cameraRequest) {
            val photo: Bitmap = data?.extras?.get("data") as Bitmap
            imageView.setImageBitmap(photo)
        }
    }
}

ステップ4:AndroidManifest.xmlを確認する

androidManifest.xml は以下のようになります。MainActivity がランチャーアクティビティとして正しく登録されていることを確認しておきましょう。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.q11">

    <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>

なお、端末やOSのバージョンによっては、マニフェストへのカメラ権限の宣言が必要になる場合があります。その際は、<manifest> タグ内に次の1行を追記してください。

<uses-permission android:name="android.permission.CAMERA" />

アプリを実行してみる

それでは、実際にアプリを動かしてみましょう。ここでは、実機のAndroidスマートフォンをパソコンに接続しているものとして説明します。

  1. Android Studioでプロジェクト内のアクティビティファイルを開きます。
  2. ツールバーのRunアイコン(緑色の再生ボタン)をクリックします。
  3. デバイス選択画面で、接続した自分のモバイル端末を選択します。
  4. 端末でアプリが起動し、初期画面が表示されます。

ボタンをタップしてカメラを起動し、撮影した写真がImageViewに表示されれば成功です。ぜひ実際に手を動かしながら、カメラ連携の基本をマスターしてみてください。

  1. AndroidアプリでImageViewの角を丸く表示する方法を徹底解説

    はじめに Androidアプリ開発では、プロフィール画像やサムネイルなどの画像の角を丸く表示したい場面がよくあります。角丸の画像を取り入れるだけで、UI全体が柔らかく洗練された印象になります。 本記事では、BitmapShaderとCanvasを活用してImageViewの角を丸く加工する方法を、実際のコード付きでステップ形式に分けて解説します。 手順1:Android Studioで新規プロジェクトを作成する Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目(アプリ名・パッケージ名・保存先など)を入力して、新しいプロジェ

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

    Androidアプリでカメラを操作する方法とは? 本記事では、Androidアプリからカメラを起動し、撮影した写真を画面に表示するまでの一連の手順を、サンプルコード付きでわかりやすく解説します。Android Studioを使った基本的な開発経験があれば、初心者の方でもスムーズに実装できる内容です。 このサンプルで作れるもの 今回紹介するサンプルアプリは、以下の動作を行います。 ボタンをタップすると標準カメラアプリが起動する 撮影した写真をBitmapとして受け取る 受け取った画像をImageViewに表示する カメラの直接制御には複雑なCamera APIが必要ですが、このサンプルでは