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 デバイスとして機能します)。UsbInterface
とUsbEndpoint
は、デバイスの標準 USB インターフェースとエンドポイントへのアクセスを提供します。UsbDeviceConnection
とUsbRequest
: 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
クラスには以下の新しい入力デバイスソースが含まれています。
SOURCE_CLASS_JOYSTICK
- ソースデバイスにはジョイスティック軸があります。SOURCE_CLASS_BUTTON
- ソースデバイスにボタンまたはキーがあります。SOURCE_GAMEPAD
- ソースデバイスにKEYCODE_BUTTON_A
やKEYCODE_BUTTON_B
などのゲームパッド ボタンがあります。意味SOURCE_CLASS_BUTTON
SOURCE_JOYSTICK
- ソースデバイスにジョイスティックの軸があります。SOURCE_CLASS_JOYSTICK を意味します。
プラットフォームでは、これらの新しいソースからのモーション イベントと、マウスやトラックボールからのモーション イベントを記述するために、KeyEvent
のキーコードを定義するのと同様に、MotionEvent
で軸コードを定義するようになりました。ジョイスティックとゲーム コントローラの新しい軸コードには、AXIS_HAT_X
、AXIS_HAT_Y
、AXIS_RTRIGGER
、AXIS_ORIENTATION
、AXIS_THROTTLE
など多数あります。既存の MotionEvent
軸は、AXIS_X
、AXIS_Y
、AXIS_PRESSURE
、AXIS_SIZE
、AXIS_TOUCH_MAJOR
、AXIS_TOUCH_MINOR
、AXIS_TOOL_MAJOR
、AXIS_TOOL_MINOR
、AXIS_ORIENTATION
で表されます。
また、MotionEvent
は、フレームワークで特定の軸のマッピング方法を把握できない場合に使用される一般的な軸コードの数を定義します。特定のデバイスでは、汎用軸コードを使用してカスタム モーション データをアプリに渡すことができます。軸のリストとそれぞれの解釈については、MotionEvent
クラスのドキュメントをご覧ください。
このプラットフォームでは、アプリにモーション イベントをバッチで提供するため、1 つのイベントに、現在の位置と、いわゆる過去の動きが複数含まれることがあります。アプリケーションでは、getHistorySize()
を使用して履歴サンプルの数を取得し、getHistoricalAxisValue()
を使用してすべての履歴サンプルを取得して処理する必要があります。その後、アプリケーションは getAxisValue()
を使用して現在のサンプルを処理する必要があります。
一部の軸は、特別なアクセサ メソッドを使用して取得できます。たとえば、getAxisValue()
を呼び出す代わりに getX()
を呼び出すことができます。アクセサが組み込まれた軸には、AXIS_X
、AXIS_Y
、AXIS_PRESSURE
、AXIS_SIZE
、AXIS_TOUCH_MAJOR
、AXIS_TOUCH_MINOR
、AXIS_TOOL_MAJOR
、AXIS_TOOL_MINOR
、AXIS_ORIENTATION
があります。
各入力デバイスには、システムによって割り当てられた一意の ID があります。複数のソースを提供することもできます。デバイスで複数のソースを提供する場合、同じ軸を使用して複数のソースで軸データを提供できます。たとえば、タッチソースからのタッチイベントは X 軸で画面位置データを使用し、ジョイスティック ソースからのジョイスティック イベントでは代わりに X 軸を使用します。このため、アプリケーションでは、発生元のソースに応じて軸値を解釈することが重要です。アプリはモーション イベントを処理する場合、InputDevice
クラスのメソッドを使用して、デバイスまたはソースがサポートする軸を決定する必要があります。具体的には、アプリで getMotionRanges()
を使用して、デバイスのすべての軸、またはデバイスの特定のソースのすべての軸をクエリできます。いずれの場合も、InputDevice.MotionRange
オブジェクトに返される軸の範囲情報によって各軸値のソースを指定します。
最後に、ジョイスティック、ゲームパッド、マウス、トラックボールのモーション イベントはタッチイベントではないため、「汎用」モーション イベントとして View
に渡すための新しいコールバック メソッドがプラットフォームに追加されています。具体的には、onTouchEvent()
ではなく onGenericMotionEvent()
の呼び出しを通じて、タップ以外のモーション イベントを View
に報告します。
プラットフォームが一般的なモーション イベントをディスパッチする方法は、イベント ソースクラスによって異なります。SOURCE_CLASS_POINTER
イベントは、タッチイベントの仕組みと同様に、ポインタの下で View
に移動されます。他はすべて、現在フォーカスされている View
に移動します。たとえば、ジョイスティック イベントを受け取るためには、View
がフォーカスを取得する必要があります。必要に応じて、代わりに onGenericMotionEvent()
を実装することで、アプリはアクティビティまたはダイアログのレベルでこれらのイベントを処理できます。
ジョイスティックのモーション イベントを使用するサンプルアプリについては、GameControllerInput と GameView をご覧ください。
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()
を呼び出して、そのView
のViewPropertyAnimator
オブジェクトを作成します。ViewPropertyAnimator
のメソッドを使用して、アニメーション化するプロパティとその方法を指定します。たとえば、View
を透明にフェードするには、alpha(0);
を呼び出します。ViewPropertyAnimator
オブジェクトは、基盤となるAnimator
クラスを構成して起動し、アニメーションをレンダリングする方法の詳細を処理します。
- 新しい
- アニメーションの背景色
- 新しい
getBackgroundColor()
メソッドとsetBackgroundColor(int)
メソッドを使用すると、ウィンドウ アニメーションの場合のみ、アニメーションの背後の背景色を取得または設定できます。現在、背景は任意のアルファレベルを使用して黒にする必要があります。
- 新しい
ViewAnimator
からアニメーション化された割合を取得する- 新しい
getAnimatedFraction()
メソッドを使用すると、現在のアニメーションの割合(直近のフレーム更新で使用された経過/補間された割合)をValueAnimator
から取得できます。
- 新しい
UI フレームワーク
- レイヤの強制レンダリング
- 新しい
buildLayer()
メソッドを使用すると、アプリで View レイヤを作成し、すぐにそのレイヤをレンダリングできます。たとえば、アプリはこのメソッドを使用して、アニメーションを開始する前にビューをレイヤにレンダリングできます。ビューが複雑な場合は、アニメーションを開始する前にレイヤにレンダリングすることで、フレームのスキップを回避できます。
- 新しい
- カメラの距離
- アプリは新しいメソッド
setCameraDistance(float)
を使用して、カメラからビューまでの距離を設定できます。これにより、回転などの View の 3D 変形の制御が改善されます。
- アプリは新しいメソッド
- DatePicker からのカレンダー ビューの取得
- 新しい
getCalendarView()
メソッドを使用すると、DatePicker
インスタンスからCalendarView
を取得できます。
- 新しい
- ビューが接続解除されたときにコールバックを取得する
- 新しい
View.OnAttachStateChangeListener
を使用すると、View がウィンドウにアタッチまたはデタッチされたときにコールバックを受信できます。addOnAttachStateChangeListener()
を使用してリスナーを追加し、addOnAttachStateChangeListener()
を使用してリスナーを削除します。
- 新しい
- フラグメント パンくずリストリスナー、新しい onInflate() シグネチャ
- 新しいメソッドである
setOnBreadCrumbClickListener()
は、アプリがフラグメント パンくずリストのクリックをインターセプトし、クリックされたバックスタック エントリまたはフラグメントに移動する前に必要なアクションを実行できるようにするフックを提供します。 Fragment
クラスのonInflate(attrs, savedInstanceState)
が非推奨になりました。代わりにonInflate(activity, attrs, savedInstanceState)
を使用してください。
- 新しいメソッドである
- 検索結果を新しいタブに表示する
ACTION_WEB_SEARCH
インテントに対してEXTRA_NEW_SEARCH
データキーを使用すると、既存のブラウザタブではなく、新しいブラウザタブで検索を開くことができます。
- ドローアブルのテキスト カーソル
- 新しいリソース属性
textCursorDrawable
を使用して、テキスト カーソルとして使用するドローアブルを指定できるようになりました。
- 新しいリソース属性
- リモートビューに表示される子の設定
RemoteViews
サブクラスで新しい便利なメソッドsetDisplayedChild(viewId, childIndex)
を利用できるようになり、ViewAnimator
サブクラスとAdapterViewAnimator
サブクラス(AdapterViewFlipper
、StackView
、ViewFlipper
、ViewSwitcher
など)で表示される子を設定できます。
- ゲームパッドなどの入力デバイスの汎用キー
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
を渡します。
- 新しい高性能 Wi-Fi ロックにより、デバイスの画面がオフの場合でも、アプリは高性能 Wi-Fi 接続を維持できます。音楽、動画、音声を長時間ストリーミングするアプリは、高性能 Wi-Fi ロックを取得できるため、画面がオフの場合でもストリーミングのパフォーマンスを確保できます。消費電力が増加するため、長時間実行が必要な場合は、アクティブな接続を確保する必要があります。
- その他のトラフィック データ
- アプリは、
TrafficStats
の新しいメソッドを使用して、より多くの種類のネットワーク使用状況に関する統計情報にアクセスできるようになりました。アプリケーションは、このメソッドを使用して、特定の UID の UDP 統計情報、パケット数、TCP で送受信されるペイロード バイト、セグメントを取得できます。
- アプリは、
- SIP 認証のユーザー名
- アプリケーションは、新しいメソッド
getAuthUserName()
とsetAuthUserName()
を使用して、プロファイルの SIP 認証ユーザー名を取得および設定できるようになりました。
- アプリケーションは、新しいメソッド
ダウンロード マネージャー
- 完了したダウンロードの処理
- アプリは、完了時にのみユーザーに通知するようにダウンロードを開始できるようになりました。このタイプのダウンロードを開始するには、アプリはリクエスト オブジェクトの
setNotificationVisibility()
メソッドでVISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION
を渡します。 - 新しいメソッドである
addCompletedDownload()
を使用すると、アプリがダウンロード データベースにファイルを追加して、ダウンロード アプリで管理できるようになります。
- アプリは、完了時にのみユーザーに通知するようにダウンロードを開始できるようになりました。このタイプのダウンロードを開始するには、アプリはリクエスト オブジェクトの
- ダウンロードをサイズ順に並べ替えて表示します。
- アプリは、新しい追加の
INTENT_EXTRAS_SORT_BY_SIZE
をACTION_VIEW_DOWNLOADS
インテントに追加することで、サイズで並べ替えモードでダウンロード アプリを起動できます。
- アプリは、新しい追加の
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 キャッシュ
int
としてのファイル記述子getFd()
またはdetachFd()
のいずれかのメソッドを使用して、ParcelFileDescriptor
のネイティブ ファイル記述子の int を取得できるようになりました。
Webkit
- ファイル スキーム Cookie
CookieManager
が、file:
URI スキームを使用する Cookie をサポートするようになりました。WebView
またはCookieManager
のインスタンスを構築する前に、setAcceptFileSchemeCookies()
を使用してファイル スキーム Cookie のサポートを有効または無効にできます。CookieManager
インスタンスでallowFileSchemeCookies()
を呼び出すと、ファイル スキーム Cookie が有効になっているかどうかを確認できます。
- ログイン リクエストの通知
- Android 3.0 で導入されたブラウザの自動ログイン機能をサポートするために、新しいメソッド
onReceivedLoginRequest()
は、ユーザーの自動ログイン リクエストが処理されたことをホストアプリに通知します。
- Android 3.0 で導入されたブラウザの自動ログイン機能をサポートするために、新しいメソッド
- 削除されたクラスとインターフェース
- いくつかのクラスとインターフェースは非推奨の状態になっていましたが、公開 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 レベルとはをご覧ください。