Skip to content

Instantly share code, notes, and snippets.

@yukpiz
Last active August 29, 2015 14:26
Show Gist options
  • Save yukpiz/bd7f10877116ee778cd7 to your computer and use it in GitHub Desktop.
Save yukpiz/bd7f10877116ee778cd7 to your computer and use it in GitHub Desktop.

Androidアプリでカメラ機能を利用する

AndroidManifest.xmlの設定

<!-- カメラ機能へアクセスする権限 -->
<uses-permission android:name="android.permission.CAMERA"/>
<!-- カメラ機能のない端末へのインストールを制限する -->
<uses-feature android:name="android.hardware.camera"/>

<!-- カメラActivityの追加と設定 -->
<activity
  android:name=".view.CameraActivity"
 android:screenOrientation="portrait"/>
<!--
 screenOrientationでActivityの画面向きを固定する
 portrait = 縦固定
 landscape = 横固定
-->

レイアウトの設定

以下のレイアウトファイルを追加。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/camera_preview"
  android:layout_height="match_parent"
  android:layout_width="match_parent"/>

プレビュークラスを追加

import android.content.Context;
import android.hardware.Camera;
import android.view.SurfaceView;
import android.view.SurfaceHolder;

public class CameraPreview
    extends SurfaceView
    implements SurfaceHolder.Callback
{
    private Context _context;
    private Camera _camera;

    public CameraPreview(
            Context context,
            Camera camera)
    {
        _context = context;
        _camera = camera;

        SurfaceHolder holder = getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.
            SURFACE_TYPE_PUSH_BUFFERS);
    }

    @Override
    public void surfaceCreated(
            SurfaceHolder holder)
    {
        try
        {
            _camera.setPreviewDisplay(holder);
            _camera.startPreview();
        }
        catch (Exception e)
        {
            Log.d("Failed to create surfaceview.");
        }
    }

    @Override
    public void surfaceDestroyed(
            SurfaceHolder holder)
    {}

    @Override
    public void surfaceChanged(
            SurfaceHolder holder,
            int format,
            int width,
            int height)
    {}
}

カメラActivityを追加

import android.app.Activity;
import android.os.Bundle;
import android.widget.FrameLayout;
import android.hardware.Camera;

public class CameraActivity
    extends Activity
{
    private Camera _camera;
    private CameraPreview _preview;

    @Override
    public void onCreate(
            Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera);

        try
        {
            _camera = Camera.open();

            FrameLayout layout = (FrameLayout)
                findViewById(R.id.camera_preview);
            _preview = new CameraPreview(this, _camera);
            layout.addView(_preview);
        }
        catch (Exception e)
        {
            Log.d("Failed to initialize a camera instance.");
            finish();
        }
    }

    @Override
    public void onPause()
    {
        super.onPause();
        if (_camera != null) {
            _camera.release();
            _camera = null;
        }
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment