Android 2.3 API

API レベル: 9

デベロッパー向けに、Android SDK のダウンロード可能なコンポーネントとして Android 2.3(GINGERBREAD)プラットフォームが用意されています。ダウンロード可能なプラットフォームには、Android ライブラリとシステム イメージ、エミュレータ スキンのセットなどが含まれています。Android 2.3 向けの開発やテストを開始するには、Android SDK Manager を使用してプラットフォームを SDK にダウンロードします。

API の概要

以下のセクションでは、フレームワーク API の以前のバージョンからの変更点や新機能など、2.3 のデベロッパー向けの新機能の技術的な概要を説明します。

SIP ベースの VoIP

プラットフォームに SIP プロトコル スタックとフレームワーク API が追加され、デベロッパーはインターネット電話アプリケーションを構築できるようになりました。この API を使用すると、アプリはセッション、トランスポート レベルの通信、音声を管理することなく、音声通話機能を提供できます。これらの機能は、プラットフォームの SIP API とサービスによって透過的に処理されます。

SIP API は android.net.sip パッケージで提供されています。主なクラスは SipManager です。アプリケーションは、SIP プロファイルの設定と管理、音声通話の開始、音声通話の受信に使用します。音声通話が確立されると、アプリは通話のミュート、スピーカーモードの有効化、DTMF トーンの送信などを行うことができます。また、アプリケーションで SipManager を使用して汎用 SIP 接続を作成することもできます。

プラットフォームの基盤となる SIP スタックとサービスは、メーカーおよび関連する携帯通信会社の裁量により、デバイスで利用できます。このため、アプリはユーザーに通話機能を公開する前に、isApiSupported() メソッドを使用して SIP サポートが使用可能かどうかを確認する必要があります。

アプリで SIP API を使用するには、マニフェスト ファイルで <uses-permission android:name="android.permission.INTERNET"><uses-permission android:name="android.permission.USE_SIP"> を宣言して、ユーザーに権限をリクエストする必要があります。

さらに、デベロッパーは、Google Play でフィルタリングをリクエストして、プラットフォームの SIP スタックとサービスを含まないデバイスを使用するユーザーからアプリを検出できないようにすることもできます。フィルタリングをリクエストするには、<uses-feature android:name="android.software.sip" android:required="true"><uses-feature android:name="android.software.sip.voip"> をアプリ マニフェストに追加します。

詳しくは、SIP デベロッパー ガイドをご覧ください。

近距離無線通信(NFC)

Android 2.3 には NFC スタックとフレームワーク API が含まれています。これによりデベロッパーは、ユーザーが NFC 対応デバイスに触れたときに検出される NDEF タグを読み取り、ステッカー、スマートポスター、その他のデバイスに埋め込まれた要素にタグ付けできます。

プラットフォームは、基になる NFC サービスを提供します。これは、デバイス ハードウェアと連携して、範囲に到達したときにタグを検出します。タグが検出されると、プラットフォームはインテントをブロードキャストし、タグの NDEF メッセージをエクストラとしてインテントに追加して、アプリに通知します。アプリはインテント フィルタを作成して、ターゲットとなるタグやメッセージを認識して処理できます。たとえば、インテントによってタグを受け取ったアプリは、NDEF メッセージの抽出、保存、ユーザーへのアラートなどの処理を行います。

NFC API は android.nfc パッケージで利用できます。主なクラスは次のとおりです。

  • NfcAdapter: デバイスの NFC ハードウェアを表します。
  • NdefMessage。NDEF データ メッセージを表します。これは、データを伝送する「レコード」がデバイスとタグの間で転送される標準形式です。アプリは ACTION_TAG_DISCOVERED インテントからこれらのメッセージを受信できます。
  • NdefRecordNdefMessage で配信されます。これは共有されるデータの種類を記述し、データ自体を保持します。

NFC 通信は、デバイス ハードウェアのワイヤレス技術に依存しているため、特定のデバイスでのプラットフォームの NFC 機能のサポートはメーカーによって異なります。現在のデバイスで NFC がサポートされているかどうかを確認するには、アプリは isEnabled() を呼び出して NfcAdapter をクエリします。ただし、基盤となるハードウェアのサポートに関係なく、NFC API は常に存在します。

アプリが NFC API を使用するには、マニフェスト ファイルで <uses-permission android:name="android.permission.NFC"> を宣言して、ユーザーに権限をリクエストする必要があります。

さらにデベロッパーは、NFC をサポートしていないデバイスのユーザーからアプリを見つけられないように、Google Play でフィルタリングをリクエストできます。フィルタリングをリクエストするには、アプリのマニフェストに <uses-feature android:name="android.hardware.nfc" android:required="true"> を追加します。

NFC API を使用するサンプルアプリについては、NFCDemo をご覧ください。

ジャイロスコープとその他のセンサー

Android 2.3 では、いくつかの新しいセンサー読み取りタイプ(ジャイロスコープ、回転ベクトル、直線加速度、重力、気圧計)に対するプラットフォームと API のサポートが追加されています。デベロッパーは新しいセンサー測定値を使用して、デバイスの位置や動作の正確な変化に迅速かつスムーズに対応するアプリを作成できます。Sensor API は、アプリ フレームワークとネイティブ コードのどちらで実行されているかにかかわらず、ジャイロスコープやその他のセンサーの変更を関連アプリに報告します。

デバイスで使用可能なハードウェア センサーのセットは、デバイス メーカーの裁量により異なります。

デベロッパーは、ジャイロスコープ センサーを搭載していないデバイスを使用するユーザーからアプリを見つけられないように、Google Play のフィルタリングをリクエストできます。そのためには、アプリ マニフェストに <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"> を追加します。

API の詳細については、Sensor をご覧ください。

複数のカメラのサポート

アプリは、写真または動画のキャプチャに、デバイスで利用できる任意のカメラを利用できるようになりました。Camera を使用すると、アプリは利用可能なカメラの数と各カメラの固有の特性をクエリできます。

  • 新しい Camera.CameraInfo クラスは、カメラの位置特性(向き、前面または背面)を格納します。
  • Camera クラスの新しい getNumberOfCameras() メソッドと getCameraInfo() メソッドを使用すると、アプリは利用可能なカメラをクエリして、必要なカメラを開くことができます。
  • 新しい get() メソッドを使用すると、アプリで特定のカメラの CamcorderProfile を取得できます。
  • 新しい getJpegEncodingQualityParameter() を使用すると、アプリは特定のカメラの静止画撮影品質レベルを取得できます。

前面カメラにアクセスするためのサンプルコードについては、ApiDemos サンプル アプリケーションの CameraPreview.java をご覧ください。

Camera API はさらに以下も追加します。

ミキシング可能なオーディオ エフェクト

プラットフォームのメディア フレームワークでは、バスブースト、ヘッドフォンの仮想化、イコライジング、リバーブなど、トラックごとの新しいオーディオ エフェクトやグローバル オーディオ エフェクトのサポートが追加されています。

音声効果のサンプルコードについては、ApiDemos サンプル アプリケーションの AudioFxDemo.java をご覧ください。

メディア フレームワークでは、以下も追加されています。

  • JPEG ファイルの EXIF メタデータで高度タグを新たにサポート。EXIF 高度タグの値を取得する、新しい getAltitude() メソッドが追加されました。
  • 新しい setOrientationHint() メソッドを使用すると、アプリは動画キャプチャ中に画面の向きを MediaRecorder に通知できます。

ダウンロード マネージャー

プラットフォームには、長時間実行される HTTP ダウンロードを処理する新しい DownloadManager システム サービスが含まれています。アプリは、URI を特定の宛先ファイルにダウンロードするようリクエストできます。DownloadManager はバックグラウンドでダウンロードを行い、HTTP インタラクションを処理し、エラー後や接続の変更とシステムの再起動後にダウンロードを再試行します。

  • アプリは、getSystemService(String) を呼び出して DOWNLOAD_SERVICE を渡すことで、DownloadManager クラスのインスタンスを取得できます。この API を介してダウンロードをリクエストするアプリは、ACTION_NOTIFICATION_CLICKED のブロードキャスト レシーバを登録して、ユーザーが通知またはダウンロード UI で実行中のダウンロードをクリックしたときに適切に処理する必要があります。
  • DownloadManager.Request クラスを使用すると、アプリは新しいダウンロードをリクエストするために必要なすべての情報(リクエスト URI、ダウンロード先など)を提供できます。必須パラメータはリクエスト URI のみです。デフォルトのダウンロード先は共有ボリュームです。システムで使用するスペースを再利用する必要がある場合に、システムはファイルを削除できます。ダウンロードの永続ストレージの場合は、外部ストレージのダウンロード先を指定します(setDestinationUri(Uri) を参照)。
  • DownloadManager.Query クラスには、アプリがアクティブなダウンロードをクエリおよびフィルタするためのメソッドが用意されています。

厳格モード

デベロッパーがアプリケーションのパフォーマンスをモニタリングして改善できるように、プラットフォームには StrictMode という新しいシステム機能が用意されています。StrictMode がアプリに実装すると、アプリのメインスレッドで行われるアクティビティ(UI オペレーションを受け取って、アニメーションも行っているアクティビティ)など、アプリのパフォーマンスを低下させる可能性がある誤ったディスク アクティビティやネットワーク アクティビティを検出してデベロッパーに通知します。デベロッパーは、StrictMode で発生したネットワークとディスクの使用状況に関する問題を評価し、必要に応じて修正できます。これにより、メインスレッドの応答性が向上し、ANR ダイアログがユーザーに表示されなくなります。

  • StrictMode はコアクラスであり、システムおよび VM とのメインの統合ポイントです。このクラスには、インスタンスに適用されるスレッドと VM ポリシーを管理するための便利なメソッドが用意されています。
  • StrictMode.ThreadPolicyStrictMode.VmPolicy は、スレッドと VM インスタンスに対して定義して適用するポリシーを保持します。

StrictMode を使用してアプリを最適化する方法について詳しくは、android.os.StrictMode のクラス ドキュメントとサンプルコードをご覧ください。

UI フレームワーク

  • オーバースクロールのサポート
    • ビューとウィジェットでオーバースクロールを新たにサポートしました。View では、アプリは特定のビューのオーバースクロールの有効化/無効化、オーバースコープ モードの設定、オーバースクロール距離の制御、オーバースクロールの結果の処理を行うことができます。
    • ウィジェットでは、アプリはアニメーション、スプリングバック、オーバースクロール距離などのオーバースクロール特性を制御できます。詳細については、android.view.Viewandroid.widget.OverScroller をご覧ください。
    • ViewConfiguration には、メソッド getScaledOverflingDistance()getScaledOverscrollDistance() も用意されています。
    • オーバースクロールの動作を制御するために、<ListView> 要素の新しい overScrollMode 属性、overScrollFooter 属性、overScrollHeader 属性を追加しました。
  • タップ フィルタリングのサポート
    • タップ フィルタリングが新たにサポートされました。これにより、アプリは機密性の高い機能へのアクセスを提供する View のセキュリティを向上させることができます。たとえば、タップ フィルタリングは、権限リクエストの付与、購入、広告のクリックなどのユーザー アクションのセキュリティを確保するのに適切です。詳しくは、View クラスに関するドキュメントをご覧ください。
    • ビュー要素の新しい filterTouchesWhenObscured 属性を追加しました。この属性は、ビューのウィンドウが別の可視ウィンドウで覆われているときにタップをフィルタリングするかどうかを宣言します。"true" に設定すると、トースト、ダイアログ、またはその他のウィンドウがビューのウィンドウの上に表示されるたびに、ビューはタップを受け取りません。詳細については、セキュリティに関するドキュメントを表示するをご覧ください。

    タッチ フィルタリングのサンプルコードについては、ApiDemos サンプル アプリケーションの SecureView.java をご覧ください。

  • イベント管理の改善
    • 入力イベントの新しい基本クラス、InputEvent。このクラスには、イベントが発生した InputDevice を照会するなどして、アプリがイベントの意味を判定できるようにするメソッドが用意されています。KeyEventMotionEventInputEvent のサブクラスです。
    • 入力デバイスの新しい基本クラス InputDevice。このクラスには、特定の入力デバイスの機能に関する情報が保存され、入力デバイスからのイベントの解釈方法をアプリが決定できるようにするメソッドを提供します。
  • モーション イベントの改善
    • MotionEvent API は「ポインタ ID」情報を含むように拡張されています。これにより、アプリは、上下に移動する個々の指を追跡できます。このクラスにより、アプリがモーション イベントを効率的に処理できるようにするさまざまなメソッドが追加されます。
    • 入力システムに、新しいポインタ ID 情報を使用してモーション イベントを生成するロジックが追加され、新しいポインタがダウンしたときに識別子が合成されるようになりました。システムは、モーション イベント中に複数のポインタ ID を個別にトラッキングし、最後のポインタセットと次のポインタセット間の距離で評価することで、ポインタの適切な連続性を確保します。
  • テキスト選択コントロール
    • 新しい setComposingRegion メソッドを使用すると、現在のスタイルを維持しながら、アプリでテキスト領域を合成テキストとしてマークできます。getSelectedText メソッドは、選択されたテキストをアプリに返します。メソッドは BaseInputConnectionInputConnectionInputConnectionWrapper で使用できます。
    • <TextView> の新しい textSelectHandle 属性、textSelectHandleLeft 属性、textSelectHandleRight 属性、textSelectHandleWindowStyle 属性。テキスト選択アンカーと、それを含むウィンドウのスタイルを表示するために使用するドローアブルを参照するために使用されます。
  • アクティビティ管理
  • 通知のテキストとアイコンのスタイル
  • 特大画面

    プラットフォームは、タブレット デバイスなどに搭載されているような特大画面サイズをサポートするようになりました。デベロッパーは、マニフェスト ファイルに <supports screens ... android:xlargeScreens="true"> 要素を追加することで、アプリが特大画面サイズをサポートするように設計されていることを示すことができます。アプリでは、新しいリソース修飾子 xlarge を使用して、特大画面に固有のリソースにタグを付けることができます。特大などの画面サイズをサポートする方法については、複数画面のサポートをご覧ください。

    グラフィック

    コンテンツ プロバイダ

    • アラームの設定や処理のための新しい AlarmClock プロバイダ クラス。プロバイダには、アラーム クロック アプリで新しいアラームを設定するためのアクティビティの開始に使用できる ACTION_SET_ALARM インテントのアクションとエクストラが含まれています。SET_ALARM インテントを受信するアプリは、SET_ALARM 権限を必要とするアクティビティを作成する必要があります。新しいアラームを作成するアプリでは、Context.startActivity() を使用する必要があります。これにより、ユーザーは使用するアラームアプリを選択できるようになります。
    • MediaStore は、新しいインテントのアクション PLAY_FROM_SEARCH をサポートしています。これにより、アプリは音楽メディアを検索し、可能であればその結果からコンテンツを自動的に再生できます。たとえば、音楽を聴くための音声認識コマンドの結果として、アプリでこのインテントを起動できます。
    • また、MediaStore は新しい MEDIA_IGNORE_FILENAME フラグを追加します。このフラグは、含まれるディレクトリとそのサブディレクトリ内のメディアを無視するようにメディア スキャナに指示します。デベロッパーはこれを使用して、ギャラリーにグラフィックが表示されないようにしたり、アプリのサウンドや音楽が音楽アプリに表示されないようにしたりできます。
    • Settings プロバイダは、新しいアクティビティ アクション APPLICATION_DETAILS_SETTINGSMANAGE_ALL_APPLICATIONS_SETTINGS を追加します。これにより、アプリは特定のアプリの詳細画面や [アプリの管理] 画面を表示できます。
    • ContactsContract プロバイダは、連絡先の SIP(インターネット電話)アドレスを保存するために、ContactsContract.CommonDataKinds.SipAddress データの種類を追加します。

    位置情報

    • LocationManager は、アプリを識別するシステム管理クラス WorkSource に従って、wake lock または Wi-Fi ロックの原因となったアプリ リクエストを追跡するようになりました。

      LocationManager は定期的な更新をリクエストしているすべてのクライアントを追跡し、最小更新時間を設定するときに WorkSource パラメータとしてプロバイダに伝えます。Network Location Provider は WorkSource を使用して、アプリによって開始された wake lock と Wi-Fi ロックを追跡し、[アプリの管理] で報告されるアプリのバッテリー使用量に追加します。

    • LocationManager は、指定された基準(下記参照)に基づいて定期的または 1 回限りの位置情報の更新をアクティビティに登録できるようにする、いくつかの新しいメソッドを追加します。
    • 新しい Criteria クラスを使用すると、アプリで位置情報プロバイダの選択基準のセットを指定できます。たとえば、プロバイダは、精度、電力使用量、高度、速度、方角を報告する機能、金銭的コストに応じて順序付けされる場合があります。

    ストレージ

    • Android 2.3 では、OBB(Opaque Binary Blob)ファイルをサポートする新しい StorageManager が追加されています。OBB のプラットフォーム サポートは Android 2.3 でも利用可能ですが、OBB ファイルの作成と管理を行うための開発ツールは 2011 年初頭まで利用できません。
    • Android 2.3 プラットフォームでは、SD カードを含まないデバイスの公式サポートが追加されています(ただし、物理的な SD カードが利用できない場合は、仮想 SD カード パーティションが提供されます)。便利なメソッドである isExternalStorageRemovable() を使用すると、アプリは物理 SD カードが存在するかどうかを判断できます。

    パッケージの管理

    • ハードウェア機能とソフトウェア機能を宣言するための新しい定数。以下の新機能の定数のリストをご覧ください。
    • PackageInfo は、パッケージのインストール時刻と最終更新時刻を格納する新しい firstInstallTime フィールドと lastUpdateTime フィールドを追加します。
    • 特定のコンテンツ プロバイダ クラスに関する既知の情報をすべて取得するための新しい getProviderInfo() メソッド。

    テレフォニー

    • TelephonyManager は、CDMA EVDO Rev B ネットワーク タイプを指定するための定数 NETWORK_TYPE_EVDO_B を追加します。
    • 新しい getPsc() メソッドは、UMTS ネットワーク上のサービング セルのプライマリ スクランブリング コードを返します。

    アクティビティのライフサイクル、ウィンドウへのネイティブ アクセス

    Android 2.3 では、ネイティブ コードを使用するアプリ向けに幅広い API が公開されています。このようなアプリケーションに関連するフレームワーク クラスには、次のようなものがあります。

    • NativeActivity は新しいタイプの Activity クラスで、ライフサイクル コールバックがネイティブ コード内に直接実装されています。NativeActivity とその基盤となるネイティブ コードは、他のアクティビティと同様にシステム内で実行されます。具体的には、Android アプリのシステム プロセスで実行され、アプリのメイン UI スレッドで実行されます。また、他のアクティビティと同じライフサイクル コールバックを受け取ります。
    • 新しい InputQueue クラスとコールバック インターフェースを使用すると、ネイティブ コードでイベントのキューイングを管理できます。
    • 新しい SurfaceHolder.Callback2 インターフェースを使用すると、ネイティブ コードで SurfaceHolder を管理できます。
    • Window の新しい takeInputQueue メソッドと takeSurface() メソッドを使用すると、ネイティブ コードでイベントとサーフェスを管理できます。

    ネイティブ コードの操作または NDK のダウンロードの詳細については、Android NDK のページをご覧ください。

    Dalvik ランタイム

    新しいマニフェスト要素と属性

    • アプリが特大画面のフォーム ファクタをサポートしているかどうかを示す、<supports-screens> 要素の新しい xlargeScreens 属性。詳しくは、複数画面のサポートをご覧ください。
    • <activity> 要素の android:screenOrientation 属性の新しい値:
      • "reverseLandscape" - アクティビティは画面を横向きにして、通常の横向きとは反対方向に画面に表示します。
      • "reversePortrait" - アクティビティは画面を縦向きにして通常の縦向きとは反対方向に回転させます。
      • "sensorLandscape" - アクティビティは画面を横向きにしますが、センサーを使用して画面の向きを変更できます。
      • "sensorPortrait" - アクティビティは画面を縦向きにしますが、センサーを使用して画面の向きを変更できます。
      • "fullSensor" - 向きは物理的な方位センサーによって決定されます。ユーザーがデバイスを動かした方法に基づいて、ディスプレイが回転します。これにより、デバイスの通常の動作に関係なく、可能な 4 つの回転のいずれかが可能になります(たとえば、一部のデバイスは通常は 180 度回転しません)。

    新しい権限

    • com.android.permission.SET_ALARM - ユーザーにアラームを設定するインテントをブロードキャストすることをアプリに許可します。SET_ALARM インテントのアクションを処理するアクティビティには、この権限が必要です。
    • android.permission.USE_SIP - SIP API を使用したインターネット通話の発着信をアプリケーションに許可します。
    • android.permission.NFC - NFC API を使用した NFC タグの読み取りをアプリケーションに許可します。

    新機能の定数

    プラットフォームには、デベロッパーがアプリで必要であるとアプリ マニフェストで宣言できるいくつかの新しいハードウェア機能が追加されています。これにより、デベロッパーは、Google Play で公開されるアプリのフィルタリング方法を管理できます。

    機能を宣言してフィルタリングに使用する方法の詳細については、<uses-feature> のドキュメントをご覧ください。

    API の差異レポート

    Android 2.3(API レベル 9)におけるすべての API の変更点について詳しくは、API 差分レポートをご覧ください。

    API レベル

    Android 2.3 プラットフォームでは、最新バージョンのフレームワーク API が提供されています。Android 2.3 API には、システム自体に格納されている整数の識別子(9)が割り当てられます。「API レベル」と呼ばれるこの識別子により、アプリをインストールする前に、アプリがシステムに対応しているかどうかを正しく判断できます。

    Android 2.3 で導入された API をアプリで使用するには、Android 2.3 SDK プラットフォームに用意された Android ライブラリに対してアプリをコンパイルする必要があります。必要に応じて、アプリのマニフェストの <uses-sdk> 要素に android:minSdkVersion="9" 属性を追加する必要もあるかもしれません。アプリが Android 2.3 以降でのみ動作するように設計されている場合、この属性を宣言すると、以前のバージョンのプラットフォームにアプリをインストールできなくなります。

    詳しくは、API レベルとはをご覧ください。