Android SDK 2.3(GingerBread)リリースまとめ(API編)

ついに待ちに待ったAndroid SDK 2.3のGingerBreadがリリースされたので、早速その新機能をまとめてみました。
今回は見た目の変更が多いという噂でしたが、そうでもなかったようです。しかし、今までにないくらい新機能が増えたように思います。
まずは2.3で追加された新APIを見ていきましょう。

Android SDK 2.3からのAPI

SIPベースのVoIP
フレームワークSIPプロトコルスタックが搭載され、インターネット電話を扱えるようになりました。SIPのサンプルアプリケーションはココにあります。以下は実際にSipDemoを動かしてみたところ。

 

NFC
NFC(Near Field Communications)のAPIが追加され、ハードウェアが搭載されていれば、FeliCaのように近距離通信を行うことができるようになりました。NFCのサンプルコードはココです。現時点ではまだNFCのハードウェアが搭載されたAndroid 2.3の端末がないため、試せません。エミュレータで実行すると、当然のようにExceptionが発生してしまいました。
ジャイロスコープとその他のセンサー
ジャイロスコープ、回転速度、直線加速、重力、バロメーターのセンサーが増え、センサーAPIから使用できるようになりました。センサーAPIの詳細はココです。
複数のカメラのサポート
アプリケーションから複数のカメラが利用できるようになりました。フロントカメラを利用するサンプルコードはココです。APIDemoのCameraPreviewを試してみましたが、「カメラが一個しか搭載されてないよ!」と怒られてしまいました。

オーディオ効果のミキシング
オーディオにバスブーストやリバーブなどの様々なエフェクトを掛けることのできるAPIが追加されました。オーディオエフェクトのサンプルコードはココです。以下は実際にAPIDemoを動かしてみたところ。

その他のメディア関連の新機能
JPEG画像のEXIF情報の中のaltitude(高度)の値が取得できるようになりました。また、ビデオ撮影中のオリエンテーション情報をsetOrientationHint()メソッドでMediaRecorderに通知することができるようになりました。
ダウンロードマネージャ
DownloadManagerが追加され、長期間動作するHTTPダウンロードをアプリケーションから要求することができるようになりました。
制限モード
StrictModeと呼ばれる制限モードが追加されました。ANRを発生させないために、UIスレッドで時間のかかる処理を使った場合に検知してくれるモードです。検知した場合はHandler、AysncTask、IntentServiceなどを使って回避するようにコードを書き換えることを推奨します。
UIフレームワーク
overscrollのサポート
限界までスクロールしても、余分にスクロールさせることができるようになりました。余分にスクロールさせる量などは制御することができます。
タッチフィルタリング
マルウェアなどから購入ボタンやパーミッション許可を与えるボタンなどを押させることがないように、タッチフィルタリングを使ってセキュリティを強化することができるようになりました。サンプルコードはココです。
イベント管理の改善
InputEventが新しく追加されました。
モーションイベントの改善
MotionEventにポインタIDが追加されました。それによって、アプリケーションから個々の指の動きを捕捉することができるようになりました。
テキスト選択コントロール
setComposingRegionメソッドにより、アプリケーションから編集中のテキスト領域を設定できるようになりました。TextViewに新しい属性も追加されました。
アクティビティの制御
ActivityInfoクラスにアクティビティの向きを管理する定数が追加されました。画面の回転に合わせてすべての向きに画面表示を合わせることが可能になったようです。
ノティファケーションのテキストとアイコンスタイル
ノティファケーションスタイルを管理する新しい属性が追加されました。
WebView
setUseWebViewBackgroundForOverscrollBackground()メソッドを使ってoverscrollの背景を指定することができるようになりました。
超大型スクリーン
タブレットバイスなどに見られる超大型スクリーンに対応しました。超大型スクリーンの対応方法はココを参照してください。
グラフィック
OpenGL ES 2.0の残りのglDrawElements()、glVertexAttribPointer()メソッドに対応しました。また、YV12の画像フォーマットに対応しました。
コンテントプロバイダ
Location
  • LocationManagerはシステムに管理されたWorkSourceクラスにしたがって、wake locks と wifi locksを要求するアプリケーションを追跡し、バッテリ使用量のパラメータに追加するようになりました。
  • LocationManagerに周期的または1回だけ位置情報を受け取る新しいメソッドが追加されました。
ストレージ
OBB (Opaque Binary Blob)をサポートするStorageManagerが新しく追加されました。2011年の初頭までにAndroid 2.3の開発ツールでOBBファイルを管理することができるようになる予定です。
パッケージマネージャ
PackageInfoクラスにfirstInstallTimelastUpdateTimeが追加されました。前者はパッケージのインストール日時で、後者は更新日時です。また、新しいgetProviderInfo()メソッドで独自のコンテントプロバイダクラスの情報も取得できるようになりました。
Telephony
TelephonyManagerCDMA EVDO Rev BのネットワークタイプのためのNETWORK_TYPE_EVDO_Bの定数が追加されました。また、新しいgetPsc()メソッドを使用してUMTSネットワーク上のスクランブルコードを取得できるようになりました。
アクティビティ、ウインドウのライフサイクルのネイティブアクセス
  • 新しいNativeActivityクラスを使ってネイティブコードにライフサイクルのコールバックを直接実装することができるようになりました。
  • InputQueueクラスのコールバックインターフェースでネイティブコードからイベントキューを管理できるようになりました。
  • SurfaceHolder.Callback2インターフェースでネイティブコードからSurfaceHolderを管理できるようになりました。
  • Windowクラスの新しいメソッドのtakeInputQueuetakeSurface()メソッドでネイティブコードからイベントとサーフェースを管理できるようになりました。
  • NativeActivityについてはココに詳細があります。
Dalvikランタイム
マニフェストの新しい要素と属性
  • supports-screens要素へのxlargeScreens属性の追加。超大型スクリーンをサポートするための物。
  • 要素へのandroid:screenOrientation属性の値の追加。
    • reverseLandscape
      • アクティビティが通常のランドスケープモードの上下反対の画面を持つ。
    • reversePortait
      • アクティビティが通常のポートレートモードの上下反対の画面を持つ。
    • sensorLandscape
      • アクティビティがランドスケープモード画面を持つが、センサーの検知により、持っている向きに合わせて画面の向きが入れ替わる。
    • sensorPortrait
      • アクティビティがポートレートモード画面を持つが、センサーの検知により、持っている向きに合わせて画面の向きが入れ替わる。
    • fullSensor
      • アクティビティがユーザーが動かした端末の向きに合わせて画面の向きが入れ替わる。
新しいパーミッション
  • com.android.permission.SET_ALARM
    • アプリケーションからSET_ALARMのインテントをbroadcastできるようになる。
  • android.permission.USE_SIP
    • アプリケーションから、SIP APIを使ってインターネット電話を使えるようにする。
  • android.permission.NFC
    • アプリケーションから、NFC APIを使えるようにする。
新機能の定数

APIの新機能をひと通り列挙してみました。かなりの変更量でしたね。
API Level 8からの差分はココにまとまっています。

API以外にも変わっている部分があります。
引き続き、ハイライト編でお伝えします。