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 の概要

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

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 Dataset に対応する MTP デバイスのストレージ ユニットに関する情報を保持します。このクラスのメソッドにより、アプリはストレージ ユニットの説明文字列、空き容量、最大ストレージ容量、ストレージ ID、ボリューム識別子を取得できます。
  • MtpDeviceInfo には、MTP 仕様のセクション 5.1.1 に記載されている DeviceInfo Dataset に対応する MTP デバイスに関する情報が保持されます。このクラスのメソッドを使用すると、アプリはデバイスのメーカー、モデル、シリアル番号、バージョンを取得できます。
  • MtpObjectInfo は、MTP 仕様のセクション 5.3.1 に記載されている ObjectInfo Dataset に対応する 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 の管理とミキシングを行うローカル オーディオ ハブ。
  • AudioCodec: AudioStream に定義したコーデックのコレクションが格納されます。

音声会議や同様の用途をサポートするために、アプリケーションはストリームのエンドポイントとして 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 レイヤを作成し、すぐにそのレイヤをレンダリングできます。たとえば、アプリはこのメソッドを使用して、アニメーションを開始する前にビューをレイヤにレンダリングできます。ビューが複雑な場合は、アニメーションを開始する前にレイヤにレンダリングすることで、フレームのスキップを回避できます。
  • カメラの距離
    • アプリは新しいメソッド 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) は、指定されたビットマップが現在のビットマップとサイズ、構成、またはピクセルデータと異なるかどうかを判断します。
  • カメラの位置と回転を設定する
    • Camera には、3D 変換のためにカメラの位置を制御する 2 つの新しいメソッド rotate()setLocation() が追加されています。

ネットワーク

  • 高性能 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 フレームワーク

  • 入力方法の追加の値のキーの取得

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 の違いレポートをご覧ください。

Browser

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

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