Android 3.1 の API

API レベル: 12

デベロッパーの方は、Android SDK のダウンロード可能なコンポーネントとして Android 3.1 プラットフォーム(HONEYCOMB_MR1)をご利用いただけます。ダウンロード可能なプラットフォームには、Android ライブラリとシステム イメージ、エミュレータ スキンのセットなどが含まれています。ダウンロード可能なプラットフォームには外部ライブラリは含まれていません。

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

API の概要

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

USB API

Android 3.1 では、接続されている周辺機器をプラットフォーム上で動作するアプリと統合するための、強力な新しい API が導入されています。API は、プラットフォームに組み込まれた USB(Universal Serial Bus)スタックとサービスに基づいており、USB ホストとデバイスの両方のインタラクションをサポートします。API を使用すると、USB 経由で接続されたさまざまな種類のデバイスを検出、通信、管理できるアプリを作成できます。

スタックと API は、Android 搭載デバイスがホストとして機能しているか、外部ハードウェアがホストとして機能しているかに基づいて、2 つの基本的なタイプの USB ハードウェアを区別しています。

  • USB デバイスは、Android 搭載デバイスに依存する接続ハードウェアです。たとえば、カメラやハブなどと同様、ほとんどの入力デバイス、マウス、ジョイスティックは USB デバイスです。
  • USB アクセサリは、USB ホスト コントローラを備え、電源を供給し、USB 経由で Android 搭載デバイスと通信するよう設計された接続されたハードウェアです。ロボット コントローラから音楽機器、エアロバイクなど、さまざまな周辺機器をアクセサリとして接続できます。

USB デバイスと USB アクセサリのどちらのタイプでも、プラットフォームの USB API は、接続または取り外し時のインテント ブロードキャストによる検出のほか、標準インターフェース、エンドポイント、転送モード(制御、一括、割り込み)をサポートしています。

USB API は、android.hardware.usb パッケージで入手できます。中心となるクラスは UsbManager で、USB デバイスと USB アクセサリの両方を識別して通信するためのヘルパー メソッドを提供します。アプリは UsbManager のインスタンスを取得して、接続されているデバイスやアクセサリのリストをクエリし、それらと通信したり、それらを管理したりできます。また、UsbManager は、システムがブロードキャストするインテント アクションを宣言して、USB デバイスやアクセサリの取り付けや取り外しを通知します。

他にも、次のようなクラスがあります。

  • UsbDevice。USB デバイスとして接続された外部ハードウェアを表すクラス(Android 搭載デバイスがホストとして機能します)。
  • UsbAccessory: USB ホストとして接続された外部ハードウェアを表します(Android 搭載デバイスが USB デバイスとして機能する)。
  • UsbInterfaceUsbEndpoint は、デバイスの標準 USB インターフェースとエンドポイントへのアクセスを提供します。
  • UsbDeviceConnectionUsbRequest - USB デバイスとの間でデータおよび制御メッセージを同期的または非同期的に送受信します。
  • UsbConstants。エンドポイント タイプ、デバイスクラスなどを宣言するための定数を提供します。

USB スタックはプラットフォームに組み込まれていますが、特定のデバイスでの USB ホストモードとオープン アクセサリ モードの実際のサポートはメーカーによって異なります。特に、ホストモードは Android 搭載デバイスの適切な USB コントローラ ハードウェアに依存します。

さらに、適切な USB をサポートしていないデバイスを使用しているユーザーはアプリを使用できないように、デベロッパーは Google Play でフィルタリングをリクエストできます。フィルタリングをリクエストするには、必要に応じて、以下の要素のいずれかまたは両方をアプリ マニフェストに追加します。

  • USB ホストモード(USB デバイスの接続)をサポートするデバイスにのみアプリを表示する必要がある場合は、次の要素を宣言します。

    <uses-feature android:name="android.hardware.usb.host" android:required="true">

  • USB アクセサリをサポートするデバイス(USB ホストの接続)にのみアプリを表示する必要がある場合は、次の要素を宣言します。

    <uses-feature android:name="android.hardware.usb.accessory" android:required="true">

USB アクセサリとやり取りするアプリの開発方法については、デベロッパー向けドキュメントをご覧ください。

USB ホスト API を使用するサンプルアプリについては、ADB テストミサイル ランチャーをご覧ください。

MTP/PTP API

Android 3.1 では、接続されているカメラや他の PTP デバイスとアプリが直接やり取りできるようにする新しい MTP API が公開されています。新しい API を使用すると、アプリケーションはデバイスの接続や取り外し時の通知の受信、デバイス上のファイルとストレージの管理、デバイス間でのファイルとメタデータの転送を簡単に行うことができます。MTP API は、MTP(メディア転送プロトコル)仕様の PTP(画像転送プロトコル)サブセットを実装しています。

MTP API は android.mtp パッケージで提供され、次のクラスを提供します。

  • MtpDevice は、USB ホストバス経由で接続された MTP デバイスをカプセル化します。アプリは、このタイプのオブジェクトをインスタンス化し、そのメソッドを使用して、デバイスおよびそこに格納されているオブジェクトに関する情報を取得したり、接続を開いてデータを転送したりできます。たとえば、次のような方法があります。
    • getObjectHandles() は、指定された形式と親に一致するデバイス上のすべてのオブジェクトのハンドルのリストを返します。オブジェクトに関する情報を取得するために、アプリは getObjectInfo() にハンドルを渡すことができます。
    • importFile() を使用すると、アプリでオブジェクトのデータを外部ストレージ内のファイルにコピーできます。この呼び出しは、データのサイズとデバイスの速度に応じて任意の時間ブロックすることがあるため、専用のスレッドから実行する必要があります。
    • open() を使用すると、接続されている MTP/PTP デバイスをアプリで開くことができます。
    • getThumbnail() は、オブジェクトのサムネイルをバイト配列として返します。
  • MtpStorageInfo には、MTP 仕様のセクション 5.2.2 で説明されている StorageInfo データセットに対応する MTP デバイス上のストレージ ユニットに関する情報が保持されます。このクラスのメソッドを使用すると、アプリでストレージ ユニットの説明文字列、空き容量、最大ストレージ容量、ストレージ ID、ボリューム ID を取得できます。
  • MtpDeviceInfo には、MTP 仕様のセクション 5.1.1 に記載されている DeviceInfo Dataset に対応する MTP デバイスに関する情報が保持されます。このクラスのメソッドを使用すると、アプリはデバイスのメーカー、モデル、シリアル番号、バージョンを取得できます。
  • MtpObjectInfo には、MTP 仕様のセクション 5.3.1 に記載されている ObjectInfo データセットに対応する MTP デバイスに保存されているオブジェクトに関する情報が保持されます。クラスのメソッドを使用すると、アプリケーションでオブジェクトのサイズ、データ形式、関連付けタイプ、作成日、サムネイル情報を取得できます。
  • MtpConstants には、MTP ファイル形式コード、関連付けタイプ、保護ステータスを宣言するための定数が用意されています。

新しい入力デバイスとモーション イベントのサポート

Android 3.1 では入力サブシステムが拡張され、すべてのビューとウィンドウで新しい入力デバイスと新しいタイプのモーション イベントがサポートされています。デベロッパーはこれらの機能を基盤として、ユーザーがキーボードやタッチスクリーンに加えて、マウス、トラックボール、ジョイスティック、ゲームパッド、その他のデバイスを使用してアプリを操作できるようにすることが可能です。

プラットフォームでは、マウス、スクロール ホイール、トラックボールの入力を処理するために、次の 2 つの新しいモーション イベント アクションがサポートされています。

  • ACTION_SCROLL: タップ以外のスクロール(マウスのスクロール ホイールなど)が行われたポインタの位置を表します。MotionEvent では、AXIS_HSCROLL 軸と AXIS_VSCROLL 軸の値によって相対的なスクロール移動を指定します。
  • ACTION_HOVER_MOVE: ボタンが押されていないときのマウスの現在の位置と、最後の HOVER_MOVE イベント以降の中間点をレポートします。カーソルを合わせた開始通知と終了通知はまだサポートされていません。

ジョイスティックとゲームパッドをサポートするために、InputDevice クラスには次の新しい入力デバイスソースが含まれています。

プラットフォームでは、これらの新しいソースからのモーション イベントと、マウスやトラックボールからのモーション イベントを記述するために、KeyEvent でキーコードを定義するのと同様に、MotionEvent で軸コードが定義されるようになりました。ジョイスティックとゲーム コントローラの新しい軸コードには、AXIS_HAT_XAXIS_HAT_YAXIS_RTRIGGERAXIS_ORIENTATIONAXIS_THROTTLE などがあります。既存の MotionEvent 軸は、AXIS_XAXIS_YAXIS_PRESSUREAXIS_SIZEAXIS_TOUCH_MAJORAXIS_TOUCH_MINORAXIS_TOOL_MAJORAXIS_TOOL_MINORAXIS_ORIENTATION で表されます。

また、MotionEvent は、フレームワークが特定の軸をマッピングできない場合に使用される一般的な軸コードの数を定義します。特定のデバイスでは、汎用軸コードを使用してカスタム モーション データをアプリに渡すことができます。軸のリストとそれぞれの解釈については、MotionEvent クラスのドキュメントをご覧ください。

プラットフォームは、モーション イベントをアプリケーションに一括して提供するため、1 つのイベントに現在位置と、複数の、いわゆる過去の移動を含めることができます。アプリケーションでは、getHistorySize() を使用して履歴サンプルの数を取得し、getHistoricalAxisValue() を使用してすべての履歴サンプルを順番に取得して処理する必要があります。その後、アプリケーションは getAxisValue() を使用して現在のサンプルを処理する必要があります。

一部の軸は、特別なアクセサ メソッドを使用して取得できます。たとえば、getAxisValue() を呼び出す代わりに、アプリで getX() を呼び出すことができます。アクセサが組み込まれた軸には、AXIS_XAXIS_YAXIS_PRESSUREAXIS_SIZEAXIS_TOUCH_MAJORAXIS_TOUCH_MINORAXIS_TOOL_MAJORAXIS_TOOL_MINORAXIS_ORIENTATION があります。

各入力デバイスには、システムによって割り当てられた一意の ID があります。複数のソースを提供することもできます。デバイスが複数のソースを提供する場合、複数のソースが同じ軸を使用して軸データを提供できます。たとえば、タッチソースからのタッチイベントでは画面の位置データに X 軸が使用されますが、ジョイスティック ソースからのジョイスティック イベントでは、代わりにスティックの位置に X 軸が使用されます。このため、アプリケーションでは、その発生元のソースに従って軸の値を解釈することが重要です。モーション イベントを処理する場合、アプリは InputDevice クラスのメソッドを使用して、デバイスまたはソースでサポートされている軸を決定する必要があります。具体的には、アプリは getMotionRanges() を使用して、デバイスのすべての軸、またはデバイスの特定のソースのすべての軸をクエリできます。どちらの場合も、InputDevice.MotionRange オブジェクトで返される軸の範囲情報により、各軸値のソースが指定されます。

最後に、ジョイスティック、ゲームパッド、マウス、トラックボールのモーション イベントはタッチイベントではないため、プラットフォームには、それらを「汎用」モーション イベントとして View に渡すための新しいコールバック メソッドが追加されています。具体的には、onTouchEvent() ではなく onGenericMotionEvent() の呼び出しを通じて、非タッチ モーション イベントを View に報告します。

プラットフォームが一般的なモーション イベントを送信する方法は、イベントソース クラスによって異なります。SOURCE_CLASS_POINTER イベントは、タッチイベントの仕組みと同様に、ポインタの下の View に渡されます。他はすべて、現在フォーカスされている View に行きます。たとえば、View がジョイスティック イベントを受信するには、フォーカスを取る必要があります。必要に応じて、アクティビティまたはダイアログのレベルで onGenericMotionEvent() を実装することで、アプリはこれらのイベントをアクティビティまたはダイアログのレベルで処理できます。

ジョイスティックのモーション イベントを使用するサンプルアプリについては、GameControllerInputGameView をご覧ください。

RTP API

Android 3.1 では、組み込みの RTP(リアルタイム トランスポート プロトコル)スタックに API が公開されています。アプリケーションはこのスタックを使用して、オンデマンドまたはインタラクティブなデータ ストリーミングを管理できます。特に、VoIP、プッシュツートーク、会議、音声ストリーミングを提供するアプリは、この API を使用してセッションを開始し、利用可能なネットワーク上でデータ ストリームを送受信できます。

RTP API は、android.net.rtp パッケージで利用できます。クラスには次のものがあります。

  • RtpStream: RTP でメディア ペイロードを含むネットワーク パケットを送受信するストリームの基本クラス。
  • AudioStream。RTP を介してオーディオ ペイロードを伝送する RtpStream のサブクラスです。
  • AudioGroup: デバイスのスピーカー、マイク、AudioStream の管理とミキシングを行うローカル オーディオ ハブ。
  • AudioCodecAudioStream に定義したコーデックのコレクションが含まれます。

音声会議や同様の用途をサポートするために、アプリケーションはストリームのエンドポイントとして 2 つのクラスをインスタンス化します。

  • AudioStream はリモート エンドポイントを指定します。ネットワーク マッピングと構成済みの AudioCodec で構成されます。
  • AudioGroup は、1 つ以上の AudioStream のローカル エンドポイントを表します。AudioGroup はすべての AudioStream をミックスし、必要に応じてデバイスのスピーカーとマイクを同時に操作します。

最も簡単な使用方法は、単一のリモート エンドポイントとローカル エンドポイントを使用する場合です。より複雑な使用方法については、AudioGroup で説明されている制限事項をご覧ください。

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

サイズ変更可能なアプリ ウィジェット

Android 3.1 以降では、デベロッパーはホーム画面 ウィジェットを水平方向、垂直方向、または両軸でサイズ変更可能にできます。ユーザーはウィジェットを長押ししてサイズ変更ハンドルを表示し、水平または垂直のハンドルをドラッグしてレイアウト グリッドのサイズを変更します。

デベロッパーは、ウィジェットの AppWidgetProviderInfo メタデータで resizeMode 属性を定義することで、ホーム画面ウィジェットをサイズ変更可能にすることができます。resizeMode 属性の値には、「horizontal」、「vertical」、「none」があります。ウィジェットを水平方向と垂直方向にサイズ変更可能として宣言するには、値 "horizontal|vertical" を指定します。

次に例を示します。

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure"
    android:resizeMode="horizontal|vertical" >
</appwidget-provider>

ホーム画面ウィジェットの詳細については、アプリ ウィジェットのドキュメントをご覧ください。

アニメーション フレームワーク

  • 新しい ViewPropertyAnimator クラス
    • 新しい ViewPropertyAnimator クラスを使用すると、デベロッパーは View オブジェクトで選択したプロパティを簡単にアニメーション化できます。このクラスは、プロパティのアニメーションを自動化して最適化し、View オブジェクトでの複数の同時アニメーションの管理を容易にします。

      ViewPropertyAnimator の使用は簡単です。View のプロパティをアニメーション化するには、animate() を呼び出して、その ViewViewPropertyAnimator オブジェクトを作成します。ViewPropertyAnimator のメソッドを使用して、アニメーション化するプロパティとその方法を指定します。たとえば、View を透明にフェードアウトするには、alpha(0); を呼び出します。ViewPropertyAnimator オブジェクトは、基盤となる Animator クラスを構成して開始し、アニメーションをレンダリングする詳細を処理します。

  • アニメーションの背景色
    • 新しい getBackgroundColor() メソッドと setBackgroundColor(int) メソッドを使用すると、ウィンドウ アニメーションでのみ、アニメーションの背景色を取得または設定できます。現在、背景は任意のアルファレベルを使用して黒にする必要があります。
  • ViewAnimator からアニメーション化された分数を取得する
    • 新しい getAnimatedFraction() メソッドを使用すると、現在のアニメーションの割合(最新のフレーム更新で使用された経過/補間された割合)を ValueAnimator から取得できます。

UI フレームワーク

  • レイヤの強制レンダリング
    • 新しい buildLayer() メソッドを使用すると、アプリで View のレイヤを強制的に作成し、すぐに View をレンダリングできます。たとえば、アプリはこのメソッドを使用して、アニメーションを開始する前にビューをレイヤにレンダリングできます。ビューが複雑な場合は、アニメーションを開始する前にレイヤにレンダリングすることで、フレームのスキップを回避できます。
  • カメラ距離
    • アプリで新しいメソッド setCameraDistance(float) を使用すると、カメラからビューまでの距離を設定できます。これにより、回転などの View の 3D 変換に対するアプリケーションの制御が改善されます。
  • DatePicker からカレンダー ビューを取得する
  • ビューがデタッチされたときのコールバックの取得
  • フラグメントのパンくずリストリスナー、新しい onInflate() シグネチャ
  • 検索結果を新しいタブに表示する
    • ACTION_WEB_SEARCH インテントの EXTRA_NEW_SEARCH データキーを使用すると、既存のブラウザタブではなく、新しいブラウザタブで検索を開くことができます。
  • ドローアブル テキスト カーソル
    • 新しいリソース属性 textCursorDrawable を使用して、テキスト カーソルとして使用するドローアブルを指定できるようになりました。
  • リモートビューに表示される子の設定
  • ゲームパッドなどの入力デバイスの汎用キー
    • KeyEvent は、ゲームパッド ボタンに対応するために、汎用キーコードの範囲を追加します。このクラスは、isGamepadButton(int) と、キーコードを操作するための他のいくつかのヘルパー メソッドも追加します。

グラフィック

  • ビットマップを管理するためのヘルパー
    • setHasAlpha(boolean) を使用すると、ビットマップ内のすべてのピクセルが不透明(false)であると認識されていること、または一部のピクセルに不透明でないアルファ値(true)が含まれている可能性があることをアプリが示すことができます。なお、RGB_565 などの一部の設定では、この呼び出しはピクセルごとのアルファ値をサポートしていないため、無視されます。これは描画のヒントです。不透明であることがわかっているビットマップは、不透明でないピクセルごとのアルファ値を持つビットマップよりも、描画処理が速くなる場合があります。
    • getByteCount() はビットマップのサイズをバイト単位で取得します。
    • getGenerationId() を使用すると、ビットマップがキャッシュなどのために変更されたかどうかをアプリで検出できます。
    • sameAs(android.graphics.Bitmap) は、指定された Bitmap が、ディメンション、構成、またはピクセルデータにおいて現在のビットマップと異なっているかどうかを判断します。
  • カメラの位置と回転を設定する
    • Camera には、3D 変換のためにカメラの位置を制御する 2 つの新しいメソッド rotate()setLocation() が追加されています。

ネットワーク

  • 高性能 Wi-Fi ロック
    • 新しい高性能 Wi-Fi ロックにより、デバイスの画面がオフの場合でも、アプリは高性能な Wi-Fi 接続を維持できます。音楽、動画、音声を長時間ストリーミングするアプリは、高性能 Wi-Fi ロックを取得して、画面がオフの場合でもストリーミング パフォーマンスを確保できます。アクティブな電力を消費するため、長時間稼働が必要なときに高性能な Wi-Fi 接続を確保する必要があります。

      高性能ロックを作成するには、createWifiLock() の呼び出しでロックモードとして WIFI_MODE_FULL_HIGH_PERF を渡します。

  • その他のトラフィック統計情報
    • アプリは TrafficStats の新しいメソッドを使用して、さまざまな種類のネットワーク使用量に関する統計情報にアクセスできるようになりました。アプリケーションはこのメソッドを使用して、特定の UID の UDP 統計情報、パケット数、TCP の送受信ペイロードのバイト、セグメントを取得できます。
  • SIP 認証のユーザー名
    • アプリケーションは、新しいメソッド getAuthUserName()setAuthUserName() を使用して、プロファイルの SIP 認証ユーザー名を取得および設定できるようになりました。

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

  • 完了したダウンロードの処理
    • 完了した場合にのみユーザーに通知するように、アプリケーションでダウンロードを開始できるようになりました。このタイプのダウンロードを開始するには、アプリケーションはリクエスト オブジェクトの setNotificationVisibility() メソッドで VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION を渡します。
    • 新しいメソッド addCompletedDownload() を使用すると、アプリがダウンロード データベースにファイルを追加して、ダウンロード アプリで管理できるようになります。
  • ダウンロードをサイズ順に並べ替えて表示します。

IME フレームワーク

  • インプット メソッドのエクストラ値キーを取得する
    • InputMethodSubtype は、containsExtraValueKey() メソッドを追加して ExtraValue 文字列がサブタイプに保管されているかどうかを確認し、getExtraValueOf() メソッドを追加して ExtraValue ハッシュマップから特定のキー値を抽出します。

Media

  • 新しいストリーミング オーディオ形式
    • メディア フレームワークでは、未加工の ADTS AAC コンテンツの組み込みサポート、ストリーミング オーディオの改善、FLAC オーディオのサポートが追加され、最高品質の(ロスのない)圧縮音声コンテンツが可能になりました。詳しくは、サポートされているメディア形式のドキュメントをご覧ください。

停止したアプリの起動コントロール

Android 3.1 以降、システムのパッケージ マネージャーは停止状態のアプリを追跡し、バックグラウンド プロセスやその他のアプリからの起動を制御する手段を提供します。

アプリの停止状態は、アクティビティの停止状態とは異なります。システムはこの 2 つの停止状態を個別に管理します。

プラットフォームでは、2 つの新しいインテント フラグが定義されています。これにより、送信者は、このインテントで停止したアプリのコンポーネントの有効化を許可するかどうかを指定できます。

  • FLAG_INCLUDE_STOPPED_PACKAGES - 解決対象の潜在的なターゲットのリストに停止したアプリのインテント フィルタを含めます。
  • FLAG_EXCLUDE_STOPPED_PACKAGES - 停止したアプリのインテント フィルタを潜在的なターゲットのリストから除外します。

インテントでこれらのフラグのどちらも定義されていない場合、デフォルトの動作として、停止したアプリのフィルタが潜在的なターゲットのリストに含まれます。

なお、FLAG_EXCLUDE_STOPPED_PACKAGESすべてのブロードキャスト インテントに追加されます。これは、バックグラウンド サービスからのブロードキャストによって、停止したアプリのコンポーネントが誤ってまたは不必要に起動されるのを防ぐためです。バックグラウンド サービスまたはアプリは、停止したアプリのアクティブ化を許可するブロードキャスト インテントに FLAG_INCLUDE_STOPPED_PACKAGES フラグを追加することで、この動作をオーバーライドできます。

アプリは、最初にインストールされたものがまだ起動されていないときや、ユーザーが([アプリケーションの管理] で)手動で停止したときは停止状態になります。

アプリの初回起動とアップグレードの通知

プラットフォームでは、アプリの初回起動の通知が改善され、2 つの新しいインテント アクションによるアップグレードが追加されています。

  • ACTION_PACKAGE_FIRST_LAUNCH - アプリが初めて起動されたとき(つまり、初めて停止状態から移行したとき)に、そのアプリのインストーラ パッケージに送信されます。データにはパッケージの名前が含まれています。
  • ACTION_MY_PACKAGE_REPLACED - 既存のバージョンを上書きして新しいバージョンがインストールされたことを、アプリケーションに通知します。これは置き換えられたアプリにのみ送信されます。追加データは含まれません。受信するには、このアクションのインテント フィルタを宣言します。インテントを使用して、アップグレード後にアプリを適切な実行状態に戻すのに役立つコードをトリガーできます。

    このインテントはアプリに直接送信されますが、アプリがアップグレードされたのが開始状態(停止状態ではない)の間に行われた場合に限られます。

コア ユーティリティ

  • LRU キャッシュ
    • 新しい LruCache クラスを使用すると、アプリで効率的なキャッシュ保存のメリットを活用できます。アプリでこのクラスを使用すると、キャッシュ データの適切なメモリ フットプリントを維持しながら、ネットワークからのデータの計算やダウンロードに要する時間を短縮できます。LruCache は、限られた数の値への強力な参照を保持するキャッシュです。値はアクセスされるたびに、キューの先頭に移動します。完全なキャッシュに値が追加されると、キューの最後にある値が強制排除され、ガベージ コレクションの対象となる可能性があります。
  • int としてのファイル記述子
    • 新しいメソッド getFd() または detachFd() のいずれかを使用して、ParcelFileDescriptor のネイティブ ファイル記述子の int を取得できるようになりました。

Webkit

  • ファイル スキーム Cookie
    • CookieManager で、file: URI スキームを使用する Cookie がサポートされるようになりました。WebView または CookieManager のインスタンスを作成する前に、setAcceptFileSchemeCookies() を使用してファイル スキーム Cookie のサポートを有効または無効にできます。CookieManager インスタンスでは、allowFileSchemeCookies() を呼び出すことで、ファイル スキーム Cookie が有効になっているかどうかを確認できます。
  • ログイン リクエストの通知
    • Android 3.0 で導入されたブラウザの自動ログイン機能をサポートするため、新しいメソッド onReceivedLoginRequest() はユーザーの自動ログイン リクエストが処理されたことをホストアプリに通知します。
  • クラスとインターフェースを削除しました
    • いくつかのクラスとインターフェースは、以前は非推奨の状態であった後、公開 API から削除されました。詳しくは、API 差分レポートをご覧ください。

ブラウザ

ブラウザアプリには、ウェブ アプリケーションをサポートするために次の機能が追加されています。

  • HTML5 <video> タグに埋め込まれた動画のインライン再生をサポートします。再生は可能な限りハードウェア アクセラレーションにより行われます。
  • すべてのサイト(モバイルとパソコン)の固定位置要素に対するレイヤのサポート。

新機能の定数

プラットフォームは、デベロッパーがアプリ マニフェストで宣言できる新しいハードウェア機能定数を追加します。これにより、Google Play などの外部エンティティに、このバージョンのプラットフォームでサポートされている新しいハードウェア機能に対するアプリの要件を通知できます。デベロッパーは、これらの機能定数とその他の機能定数を <uses-feature> マニフェスト要素で宣言します。

  • android.hardware.usb.accessory - アプリは USB API を使用して、USB 経由で接続された外部ハードウェア デバイスと通信し、ホストとして機能します。
  • android.hardware.usb.host - アプリは USB API を使用して、USB 経由で接続されたデバイスとして機能する外部ハードウェア デバイスと通信します。

Google Play は、<uses-feature> マニフェスト要素で宣言されている機能に基づいてアプリをフィルタします。アプリ マニフェストで機能を宣言する方法について詳しくは、Google Play フィルタをご覧ください。

API 差分レポート

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

API レベル

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

Android 3.1 で導入された API をアプリで使用するには、Android 3.1 SDK プラットフォームで提供される Android ライブラリに対してアプリをコンパイルする必要があります。必要に応じて、アプリのマニフェストの <uses-sdk> 要素に android:minSdkVersion="12" 属性を追加する必要もあるかもしれません。

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