連載
» 2010年07月01日 00時00分 公開

Androidで動く携帯Javaアプリ作成入門(18):開発者が知っておきたいAndroid 2.2の新機能12連発 (2/3)

[ 緒方聡,株式会社イーフロー]

【2】アプリが外部ストレージに置けるように

 例えば、SDカードにアプリを置けます。Android端末は、内部ストレージの容量が小さいもの(数十Mbytesなど)が少なくなく、「新しいアプリを入れるために使用頻度の低いアプリをアンインストールしなければ」なんてことが発生しがちです。しかしアプリがSDカードに置けるのであれば、取りあえずそんな理由でアンインストールされることはないでしょう。

 インストール場所は、「AndroidManifest.xml」に設定します。

図5 インストール場所の設定 図5 インストール場所の設定

 [Install location]の値は、それぞれ以下の意味を持ちます。

詳細
auto この設定をすると、アプリはAndroid端末内にインストールされますが、内部ストレージがいっぱいの場合、外部ストレージにインストールされる。インストール後もエンドユーザーによる移動が可能
internalOnly 内部ストレージにのみインストール可能。このオプションは、android:installLocationを設定しなかった場合と同じ
preferExternal 外部ストレージにインストール。もし外部ストレージが使用できない、容量が足りない、アプリにフォワードロックが掛かっている場合、内部ストレージにインストール。インストール後もエンドユーザーによる移動が可能
表1 [Install location]の値

【3】クラウド向けデータバックアップ用API

 クラウドにアプリのデータや設定をバックアップするサービスが追加されました。ユーザーがファクトリーリセットや新しいAndroid端末への乗り換えなどで、再度アプリをインストールするタイミングに自動的に設定を復元します。

 バックアップサービスは、同期サービスとして設計されているわけではありません。またクラウドストレージは、必ずしもすべてのAndroid端末に対して同様のバックアップを提供するわけではありません(クラウドストレージとバックアップ転送は端末とサービスプロバイダで異なります)。バックアップしたデータは、そのアプリ自身からはアクセスでき、ほかのアプリからはアクセスできないことが保証されます。

 クラウドと端末間のバックアップデータ転送時、転送データはセキュリティの保証がされないため、ユーザー名やパスワードといったセンシティブなデータを扱う場合は注意しなければなりません。

 バックアップの設定はAndroidManifest.xmlのapplication単位に設定します。

図6 バックアップ設定 図6 バックアップ設定

 設定項目の意味は、以下の通りです。

項目 詳細
Backup agent android:backupAgent。BackupAgentクラスを継承したサブクラスを指定
Allow backup android:allowBackup。falseに設定すると、Backup agentが設定されていてもバックアップ処理が実行されない
Kill after restore android:killAfterRestore。falseに設定されている場合はバックアップデータを復元後、アプリを終了するかどうか問い合わせない
Restore needs application android:restoreNeedsApplication。推奨されない設定項目(なので、説明が存在しない)
Restore any version android:restoreAnyVersion。trueに設定すると、あらゆるバージョンに対してバックアップデータの復元を行う。使用に際しては、十分注意
表2 バックアップの設定項目

【4】OpenGL ES 2.0などグラフィックスの強化

 OpenGL ES 2.0とそれに関連するクラスが新設され、JavaからOpenGL ES 2.0の機能が使用可能になりました(これまでもNDKを使用して利用できていました)。

 また、YUVイメージフォーマット(YuvImageクラス)とカメラAPIのためのImageFormatクラスが新設されました。

【5】音声やマルチメディアの強化

 ボリュームやリングトーンモード制御を行うオーディオサービスにアクセスするためのAudioManagerクラスが新設されました。

 また、オーディオ状態を変更したことを通知するためのブロードキャストIntentの値であるACTION_SCO_AUDIO_STATE_CHANGEDが追加されました。

 SoundPoolクラスにサウンド読み込み完了を検知するAPI(SoundPool#setOnLoadCompleteListener)、自動停止、自動再開API(SoundPool#autoPause、SoundPool#autoResume)が追加されました。

 MediaRecoderクラスにチャネル数設定API(MediaRecoder#setAudioChannels)、エンコーディングとサンプリングレート設定API、(MediaRecoder#setAudioEncodingBitRate)、サンプリングレート設定API(MediaRecoder#setAudioSamplingRate)が追加されました。

 MediaScannerConnectionに自動でメディアファイルをスキャンするメソッド(MediaScannerConnection#scanFile)が追加されました。これまではパス1つ、MIME-Type1つを指定して、繰り返し呼び出さなければなりませんでしたが、パスとMIME-Typeを複数渡して自動で行えるようになりました。スキャンが完了したらコールバックで通知されます。

【6】音声認識強化とサードパーティ製エンジン

 新しい音声認識APIはアプリとの、より豊かな相互作用が可能です。例えば、音声認識APIを使用してIMEへ音声入力を統合する、などです。

 RecognitionServiceクラスが新設され、サードパーティ製エンジンを使用することが可能になりました。新設されたRecognitionListenerインターフェイスで音声認識の結果を細かく取得でき、音声認識開始を通知する専用のRecognizerIntentクラスが新設されました。

【7】カメラとビデオの強化

 前回の「もはやケータイに必須のカメラをAndroidで制御しよう」で取り上げたカメラ機能も変更されました。プレビューパイプラインの効率改善のためにAPIがいくつか変更されています。

メソッド 詳細
Camera#addCallbackBuffer プレビューキューにバッファを割り当てる。アプリは複数のバッファを割り当てることができ、setPreviewCallbackWithBufferで通知される度にキューからなくなっていく。アプリ側でデータを取り出したら、再び同じ領域をこのメソッドでキューに追加すれば、メモリ割り当ての時間が節約できる
Camera#reconnect 動画撮影時、開始・終了の時間を節約するために初期化されたカメラを動画撮影のために渡すが、MediaRecorderがカメラを使い終えたら、このメソッドでカメラに再接続する
Camera#setDisplayOrientation カメラの向きを設定できる。これまでは横向き専用だった
Camera#setPreviewCallbackWithBuffer addCallbackBufferで登録したバッファにプレビューが設定される
Camera#setZoomChangeListener ズームが変更された場合に呼び出されるリスナーを登録
Camera#startSmoothZoom スムーズなズームを開始
Camera#stopSmoothZoom スムーズなズームを停止
表3 変更されたカメラ関係のメソッド

 上記以外にも、ズームレベル、カメラパラメータの変更などがあります。

 カメラとビデオに関連して、単体でも使用可能なThumnailUtilsクラスが新設されました。動画のファイルパスを指定してサムネイルを作ったり、既存のビットマップからサムネイルを作ったりできます。

 動画撮影時の設定を取得するCamcorderProfileクラスが新設されました。ハイクオリティとロークオリティの設定が取得可能で、MediaRecorder#setProfileに設定して使用します。

 ExifInterfaceクラスがFocalLengthとGPSDataStampをサポートしました。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。