カメラAPI概要

【APIの説明】

カメラAPIについて

Android標準には、カメラクラス(com.android.hardware.Camera)が存在していますが、これはその標準カメラクラスを拡張するためのAPIです。
com.android.hardware.Cameraでは、サブカメラを使用するためのIFが存在していないため、サブカメラ使用時に必要となるIFを追加します。

CameraExクラスについて

CameraExクラスは標準のCameraを拡張することで、メインカメラ、サブカメラに対するカメラオブジェクトを取得可能にしています。
CameraExを使用する場合、com.android.hardware.Cameraオブジェクトが返却されますので、以後は標準のCameraオブジェクトと同じ使い方ができます。
※Android標準のカメラ使用法 参照

メインカメラ・サブカメラの起動、切替について

CameraEx.open()を使用することで、実機に付属しているメインカメラ、サブカメラのどちらかを指定してカメラを起動することができます。
起動したカメラのメイン・サブ切替は、一旦カメラオブジェクトを解放し、再度CameraEx.open()で起動しなおしてください。

Android標準のカメラ使用法

標準のカメラクラス使用方法についてはAndroid Developersのサイトを参照してください。

Android Developers
標準カメラクラス android.hardware.Camera
使用例 API Demos CameraPreview.java

このAPIを使用するには

SDKへAddOnの追加と、Manifestファイルへライブラリの参照およびAPIを使用するためのパーミッションを記述する必要があります。

【パッケージ/クラス一覧】

パッケージ名 クラス名 備考
jp.co.sharp.android.hardware CameraEx カメラ拡張クラス

【APIの使い方】

Manifestファイルの記述

Android1.6用は以下の設定になります。
まず、Manifestファイルへ、アプリケーション が参照するライブラリの参照設定を行います。
Manifestファイルの<application>要素の子要素に<user-library>を追加します。
<user-library>のandroid:name属性に jp.co.sharp.android.hardware を設定します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.package.name">
  ...
  <application android:name="MyApplication" >
    <uses-library android:name="jp.co.sharp.android.hardware" />
    ...
  </application>
  ...
</manifest>

Android2.1用は以下の設定になります。
まず、Manifestファイルへ、アプリケーションが参照するライブラリの参照設定を行います。
Manifestファイルの<manifest>要素の子要素に<uses-feature>と、<application>要素の子要素に<uses-library>を追加します。
<uses-library>のandroid:name属性にjp.co.sharp.android.hardwareを設定します。
<uses-feature>のandroid:name属性にjp.co.sharp.android.hardware.cameraexを設定します。
<uses-feature>のandroid:required属性にtrueを設定します。
<uses-feature>を設定することにより、弊社端末以外でGoogle Playにアクセスした場合に表示されないようになります。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.package.name">
  ...
  <application android:name="MyApplication" >
    <uses-library android:name="jp.co.sharp.android.hardware" />
    ...
  </application>
  <uses-feature
              android:name="jp.co.sharp.android.hardware.cameraex"
              android:required="true" />

  ...
</manifest>

以下からは共通の設定になります。
次に、アプリケーションで、カメラを使用するための、パーミッション設定をします。
Manifestファイルの<manifest>要素の子要素に<uses-permission>を追加します。
<uses-permission>のandroid:name属性に android.permission.CAMERAを設定します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.package.name">
  ...
  <application android:name="MyApplication" >
    ...
  </application>
  ...
  <uses-permission android:name="android.permission.CAMERA" />
  ...
</manifest>

これらの宣言がなければ、カメラを使用することができないため、注意してください。

カメラの起動・表示

基本的なカメラの起動および、カメラが取得した画像を表示するviewの設定についてはAndroid Developersのサンプルを参照してください。

Android Developers
使用例 API Demos CameraPreview.java

追加されたopenメソッドの使用方法

○メインカメラ取得方法

package com.android.camera;
 
    /* メイン */
    android.hardware.Camera camera; //カメラ
    camera = jp.co.sharp.android.hardware.CameraEx.open(
        jp.co.sharp.android.hardware.CameraEx.CAMERA_POSITION_MAIN
    );

○サブカメラ取得方法

package com.android.camera;
 
    /* サブ */
    android.hardware.Camera camera; //カメラ
    camera = jp.co.sharp.android.hardware.CameraEx.open(
        jp.co.sharp.android.hardware.CameraEx.CAMERA_POSITION_SUB
    );

【その他の特記事項】

サンプルアプリについて

サンプルアプリはメイン・サブを指定したカメラの起動のみ可能です。
撮影したデータの保存方法などはAndroid Developersの標準カメラクラスの説明を参照してください。

Android Developers
標準カメラクラス android.hardware.Camera
撮影データを取得するIF
            public final void takePicture (
                Camera.ShutterCallback shutter,
                Camera.PictureCallback raw,
                Camera.PictureCallback jpeg
            )

Android 1.6とAndroid 2.1の両方に対応させようとした場合

●Android 1.6用SDK AddOnを使用する場合
Android 1.6用API概要とリファレンスの規定に従い、AndroidManifest.xmlでuses-library、uses-permission、uses-sdkを指定してビルドください。
2.1の端末でも動作可能です。

●Android 2.1用ADK AddOnを使用する場合
Android 1.6上で動作できるようにするためには、AndroidManifest.xmlで uses-library、uses-permission、uses-sdk を指定してビルドください。
ただし、uses-sdkはandroid:minSdkVersion="4"に設定する必要があります。
ビルド時に警告メッセージを表示しますが、ビルド後のAPKはAndroid 1.6の端末にもインストール可能です。

なお、上記3つに加えて、Android 2.1で追加したuses-featureを指定してビルドすることも可能です。
feature指定すると、公開APIを利用したアプリケーションをマーケットに公開した際、feature指定した機能がない端末へのインストールを制限することができます。

  • ※この指定をしないと、Android 1.6には存在しない機能を使ったアプリケーションもAndroid 1.6にインストールできてしまいます。その場合、実行時にException発生して強制終了になります。
  • ※ 2011年2月22日 Android2.1用のManifestファイルの記述を修正致しました。
  • ※ 2010年12月10日 Android2.1用のManifestファイルの記述を追記致しました。
このページの先頭へ