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"> を宣言して、ユーザーに権限をリクエストする必要があります。

さらに、デベロッパーは、プラットフォームの SIP スタックとサービスを含まないデバイスのユーザーからアプリを見つけられないよう、Google Play でフィルタリングをリクエストできます。フィルタリングをリクエストするには、<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 インテントから受信できます。
  • NdefRecord: NdefMessage で提供されます。これは、共有するデータのタイプを記述し、データ自体を含んでいます。

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 という新しいシステム機能が用意されています。アプリに実装すると、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 プロバイダは、ContactsContract.CommonDataKinds.SipAddress というデータの種類を追加して、連絡先の SIP(インターネット テレフォニー)アドレスを保存します。

    場所

    • 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 ネットワーク上のサービング セルのプライマリ スクランブリング コードを返します。

    アクティビティのライフサイクル、Windows

    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 レベルとはをご覧ください。