Android 3.0 API

API レベル: 11

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

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

API の概要

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

フラグメント

フラグメントは、アクティビティの個別の要素を、独自の UI とライフサイクルを定義する自己完結型のモジュールに分割できる新しいフレームワーク コンポーネントです。フラグメントを作成するには、Fragment クラスを拡張し、Activity と同様に、ライフサイクル コールバック メソッドをいくつか実装する必要があります。複数のフラグメントを 1 つのアクティビティにまとめることで、各ペインが独自のライフサイクルとユーザー入力を管理するマルチペイン UI を構築できます。

また、アクティビティの実行中にのみ発生するダウンロードの進行状況を管理するなど、UI を提供せずにフラグメントをアクティビティのワーカーとして使用することもできます。

以下の点にもご注意ください。

  • フラグメントは自己完結型であり、複数のアクティビティで再利用できます。
  • アクティビティ内のフラグメントを追加、削除、置換、アニメーション化できる
  • アクティビティが管理するバックスタックにフラグメントを追加できます。これにより、フラグメントの変更後もフラグメントの状態が保持され、ユーザーはさまざまな状態間をさかのぼって移動できるようになります。
  • 代替レイアウトを提供すると、画面サイズと向きに基づいてフラグメントを組み合わせることができます。
  • フラグメントはコンテナ アクティビティに直接アクセスでき、アクティビティのアクションバー(次で説明)にアイテムを提供できます。

アクティビティ内のフラグメントを管理するには、FragmentManager を使用する必要があります。この API には、アクティビティ内のフラグメントを検出したり、バックスタックからフラグメントをポップして以前の状態を復元するなど、フラグメントを操作するための API がいくつか用意されています。

フラグメントの追加や削除などのトランザクションを実行するには、FragmentTransaction を作成する必要があります。その後、add() remove()replace() などのメソッドを呼び出すことができます。トランザクションで行う変更をすべて適用したら、commit() を呼び出す必要があります。これにより、フラグメント トランザクションがアクティビティに適用されます。

フラグメントの使用について詳しくは、フラグメントのドキュメントをご覧ください。 API デモ アプリケーションでは、いくつかのサンプルも利用できます。

アクションバー

アクションバーは、アクティビティ ウィンドウの上部にある従来のタイトルバーに代わるものです。 左隅にアプリケーションのロゴが表示され、オプション メニューのアイテムの新しいインターフェースが提供されます。また、アクションバーでは次のことも可能です。

  • メニュー項目を「アクション アイテム」としてアクションバーに直接追加します。

    メニュー項目の XML 宣言に、"ifRoom" の値を持つ android:showAsAction 属性を含めます。十分なスペースがあると、メニュー項目がアクションバーに直接表示されます。それ以外の場合、アイテムはオーバーフロー メニュー内に配置され、アクションバーの右側にあるメニュー アイコンで表示されます。

  • アクション アイテムをウィジェット(検索ボックスなど)に置き換えて、「アクション ビュー」を作成します。

    メニュー項目の XML 宣言で、android:actionViewLayout 属性(レイアウト リソース)または android:actionViewClass 属性(ウィジェットのクラス名)を追加します。(また、アイテムがアクションバーに表示されるように android:showAsAction 属性を宣言する必要があります)。アクションバーに十分なスペースがなく、アイテムがオーバーフロー メニューに表示される場合、通常のメニュー項目のように動作し、ウィジェットは表示されません。

  • アプリケーションのロゴにアクションを追加し、カスタムロゴに置き換えます

    アプリのロゴには、自動的に android.R.id.home ID が割り当てられます。この ID がタップされると、アクティビティの onOptionsItemSelected() コールバックに渡されます。コールバック メソッドでこの ID に応答するだけで、アプリの「ホーム」アクティビティに移動するなどのアクションを実行できます。

    アイコンをロゴに置き換えるには、マニフェスト ファイルで android:logo 属性を使用してアプリのロゴを指定し、アクティビティで setDisplayUseLogoEnabled(true) を呼び出します。

  • フラグメントのバックスタック間を移動するためのパンくずリストを追加する
  • フラグメント間を移動するためのタブまたはプルダウン リストを追加する
  • テーマと背景でアクションバーをカスタマイズする

アクションバーは、新しいホログラフィック テーマを使用するすべてのアプリで標準となり、android:minSdkVersion または android:targetSdkVersion"11" に設定した場合にも標準となります。

アクションバーについて詳しくは、アクションバーのドキュメントをご覧ください。 API デモ アプリケーションでは、いくつかのサンプルも利用できます。

システム クリップボード

アプリケーションで、システム全体のクリップボードとの間で(テキストだけでなく)データをコピーして貼り付けることができるようになりました。クリップされたデータは、書式なしテキスト、URI、またはインテントです。

コピーさせたいデータへのシステム アクセスをコンテンツ プロバイダを介して提供することで、ユーザーはアプリから複雑なコンテンツ(画像やデータ構造など)をコピーし、そのタイプのコンテンツをサポートする別のアプリに貼り付けることができます。

クリップボードの使用を開始するには、getSystemService(CLIPBOARD_SERVICE) を呼び出してグローバル ClipboardManager オブジェクトを取得します。

クリップボードにアイテムをコピーするには、新しい ClipData オブジェクトを作成する必要があります。このオブジェクトは、それぞれが単一のエンティティを表す 1 つ以上の ClipData.Item オブジェクトを保持します。ClipData.Item を 1 つだけ含む ClipData オブジェクトを作成するには、newPlainText()newUri()newIntent() などのヘルパー メソッドを使用できます。それぞれ、指定した ClipData.Item をプリロードした ClipData オブジェクトを返します。

ClipData をクリップボードに追加するには、ClipboardManager のインスタンスの setPrimaryClip() に渡します。

次に、ClipboardManager に対して getPrimaryClip() を呼び出すことで、クリップボードからファイルを読み取って(貼り付ける)ことができます。受け取った ClipData の処理は複雑になる場合があり、貼り付ける前にクリップボード内のデータ型を実際に処理できることを確認する必要があります。

クリップボードには、一度に 1 つのクリップデータ(ClipData オブジェクト)しか保持されませんが、1 つの ClipData には複数の ClipData.Item を含めることができます。

詳しくは、コピーと貼り付けのドキュメントをご覧ください。また、API Demos サンプルにはコピーと貼り付けのシンプルな実装が、Note Pad サンプルにはより完全な実装が含まれています。

ドラッグ&ドロップ

新しい API を使用すると、アプリケーションのユーザー インターフェースでのドラッグ&ドロップ操作が簡単になります。ドラッグ オペレーションとは、ClipData オブジェクトに格納されたなんらかのデータを、ある場所から別の場所に転送することです。ドラッグ オペレーションの開始点と終了点は View であるため、ドラッグ&ドロップ オペレーションを直接処理する API は View クラスにあります。

ドラッグ&ドロップ オペレーションのライフサイクルは、複数のドラッグ アクションで定義され、それぞれが DragEvent オブジェクト(ACTION_DRAG_STARTEDACTION_DRAG_ENTEREDACTION_DROP など)によって定義されます。ドラッグ オペレーションに参加しようとする各ビューは、これらのアクションをリッスンできます。

アクティビティでコンテンツのドラッグを開始するには、ViewstartDrag() を呼び出して、ドラッグするデータを表す ClipData オブジェクト、ドラッグ中にユーザーが指の下に見る「シャドウ」を容易にする View.DragShadowBuilder、ドラッグ オブジェクトに関する情報を受け取る可能性のあるビューとドラッグ オブジェクトに関する情報を共有できる Object を指定します。

View でドラッグ オブジェクトを受け入れる(ドロップを受け取る)には、setOnDragListener() を呼び出して OnDragListener にビューを登録します。ビューでドラッグ イベントが発生すると、システムは OnDragListeneronDrag() を呼び出し、発生したドラッグ アクションの種類(ACTION_DRAG_STARTEDACTION_DRAG_ENTEREDACTION_DROP など)を示す DragEvent を受け取ります。ドラッグ中は、ドラッグ中のビューの onDrag() が繰り返し呼び出され、ドラッグ イベントのストリームが配信されます。受信側ビューは、DragEventgetAction() を呼び出すことで、onDragEvent() に配信されるイベントタイプを照会できます。

注: ドラッグ イベントで ClipData オブジェクトを渡すこともできますが、システム クリップボードとは関係ありません。ドラッグ&ドロップ オペレーションでは、ドラッグしたデータをシステム クリップボードに保存しないでください。

詳しくは、ドラッグ&ドロップのドキュメントをご覧ください。また、 API デモ アプリケーションと Honeycomb ギャラリー アプリケーションでのドラッグ&ドロップの実装を確認することもできます。

アプリ ウィジェット

Android 3.0 では、ユーザーのホーム画面でよりインタラクティブなアプリ ウィジェットを利用するための、GridViewListViewStackViewViewFlipperAdapterViewFlipper などの新しいウィジェット クラスがいくつかサポートされています。

さらに重要な点として、新しい RemoteViewsService を使用すると、コンテンツ プロバイダなどのリモートデータに基づく GridViewListViewStackView などのウィジェットを使用して、コレクションを含むアプリ ウィジェットを作成できます。

AppWidgetProviderInfo クラス(<appwidget-provider> 要素を使用して XML で定義)も、autoAdvanceViewIdpreviewImage という 2 つの新しいフィールドをサポートしています。autoAdvanceViewId フィールドでは、アプリ ウィジェットのホストによって自動的に進む必要があるアプリ ウィジェット サブビューのビュー ID を指定できます。previewImage フィールドは、アプリ ウィジェットの外観のプレビューを指定し、ウィジェット選択ツールからユーザーに表示します。このフィールドを指定しない場合は、アプリ ウィジェットのアイコンがプレビューに使用されます。

アプリ ウィジェットのプレビュー画像を作成できるよう(previewImage フィールドで指定)、Android Emulator には「Widget Preview」というアプリが含まれています。プレビュー画像を作成するには、このアプリを起動し、アプリのアプリ ウィジェットを選択し、プレビュー画像の表示方法を設定してから、保存してアプリのドローアブル リソースに配置します。

新しいアプリ ウィジェット機能の実装は、StackView アプリ ウィジェット アプリケーションと天気リスト ウィジェット アプリケーションで確認できます。

ステータスバーの通知

Notification API が拡張され、豊富なコンテンツを含むステータスバー通知がサポートされるようになりました。また、新しい Notification.Builder クラスを使用すると、Notification オブジェクトを簡単に作成できます。

新しい機能は次のとおりです。

  • setLargeIcon() を使用して、通知の大きなアイコンをサポートしました。これは通常、ソーシャル アプリが通知元のユーザーの連絡先写真を表示する場合や、メディアアプリがアルバムのサムネイルを表示する場合に使用されます。
  • setTicker() を使用した、ステータスバー ティッカーのカスタム レイアウトのサポート。
  • PendingIntent のボタンを含むカスタム通知レイアウトがサポートされ、よりインタラクティブな通知ウィジェットを使用できます。たとえば、通知はアクティビティを開始せずに音楽の再生を制御できます。

コンテンツ ローダー

新しいフレームワーク API は、Loader クラスを使用したデータの非同期読み込みを容易にします。ビューやフラグメントなどの UI コンポーネントと組み合わせて、ワーカー スレッドから動的にデータを読み込むことができます。CursorLoader サブクラスは、ContentProvider に基づくデータでこれを行うために特別に設計されています。

必要なのは、LoaderCallbacks インターフェースを実装して、新しいローダがリクエストされたとき、またはデータが変更されたときにコールバックを受信し、initLoader() を呼び出してアクティビティまたはフラグメントのローダを初期化することだけです。

詳細については、ローダのドキュメントをご覧ください。LoaderCursor LoaderThrottle のサンプルで、ローダを使用するサンプルコードを確認することもできます。

Bluetooth A2DP とヘッドセット API

Android には、接続されている Bluetooth A2DP デバイスとヘッドセット プロファイル デバイスの状態をアプリが確認するための API が追加されています。たとえば、アプリは、音楽を聴くために Bluetooth ヘッドセットが接続されたタイミングを識別し、必要に応じてユーザーに通知できます。また、アプリはベンダー固有の AT コマンドのブロードキャストを受信し、接続済みデバイスのバッテリー残量低下など、接続済みデバイスの状態をユーザーに通知することもできます。

それぞれの BluetoothProfile を初期化するには、A2DP または HEADSET プロファイル定数を指定して getProfileProxy() を呼び出し、Bluetooth クライアントが接続または切断されたときにコールバックを受信する BluetoothProfile.ServiceListener を呼び出します。

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

柔軟性に優れたまったく新しいアニメーション フレームワークを使用すると、任意のオブジェクト(ビュー、ドローアブル、フラグメント、オブジェクトなど)の任意のプロパティをアニメーション化できます。これにより、アニメーションの次のような要素を定義できます。

  • 所要時間
  • 繰り返しの量と動作
  • 時間補間の種類
  • アニメーターがアニメーションを一緒に、順次、または指定した遅延後に再生するように設定する
  • フレーム更新遅延

デフォルトでは、オブジェクトの int、float、16 進数の色の値について、これらのアニメーション要素やその他の要素を定義できます。つまり、オブジェクトにこれらのタイプのいずれかのプロパティ フィールドがある場合、その値を時間の経過とともに変更してアニメーションに反映させることができます。他の型の値をアニメーション化するには、TypeEvaluator インターフェースを実装して、その型の値の計算方法をシステムに指示します。

プロパティの値をアニメーション化するために使用できるアニメーターは、ValueAnimatorObjectAnimator の 2 つです。ValueAnimator はアニメーション値を計算しますが、結果としてアニメーション化される特定のオブジェクトまたはプロパティは認識しません。これは計算を実行するだけです。更新をリッスンし、独自のロジックでデータを処理する必要があります。ObjectAnimatorValueAnimator のサブクラスであり、アニメーション化するオブジェクトとプロパティを設定でき、すべてのアニメーション処理を処理します。つまり、アニメーション化するオブジェクト、時間とともに変化するオブジェクトのプロパティ、時間の経過とともにプロパティに適用する値のセットを ObjectAnimator に渡して、アニメーションを開始します。

また、LayoutTransition クラスでは、アクティビティのレイアウトに加えた変更に対する自動遷移アニメーションが有効になります。レイアウトの一部で遷移を有効にするには、LayoutTransition オブジェクトを作成し、setLayoutTransition() を呼び出して任意の ViewGroup でそのオブジェクトを設定します。これにより、グループに対してアイテムが追加または削除されるたびに、デフォルトのアニメーションが実行されます。カスタム アニメーションを指定するには、LayoutTransition に対して setAnimator() を呼び出し、前述の ValueAnimatorObjectAnimator などのカスタムの Animator を指定します。

詳細については、プロパティ アニメーションのドキュメントをご覧ください。また、API デモ アプリケーションでアニメーション API の使用例をいくつか確認することもできます。

拡張 UI フレームワーク

  • ListView と GridView の多肢選択式選択

    setChoiceMode() の新しい CHOICE_MODE_MULTIPLE_MODAL モードでは、ユーザーが ListView または GridView から複数のアイテムを選択できるようになりました。アクションバーと併用すると、ユーザーは複数のアイテムを選択し、アクションバーのオプションのリストから実行するアクションを選択できます(多肢選択式アクション モードに変化)。

    多肢選択式選択を有効にするには、setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) を呼び出して MultiChoiceModeListenersetMultiChoiceModeListener() で登録します。

    ユーザーがアイテムを長押しすると、アクションバーが多肢選択式アクション モードに切り替わります。onItemCheckedStateChanged() を呼び出してアイテムが選択されると、システムが MultiChoiceModeListener に通知します。

    多肢選択式の選択の例については、API Demos サンプル アプリケーションの List15.java クラスをご覧ください。

  • ビューを変換する新しい API

    新しい API を使用すると、アクティビティ レイアウト内のビューに 2D および 3D 変換を簡単に適用できます。ビューのレイアウト位置、向き、透明度などを定義する一連のオブジェクト プロパティを使用して、新しい変換を行うことができます。

    ビューのプロパティを設定するための新しいメソッドには、setAlpha()setBottom()setLeft()setRight()setBottom()setPivotX()setPivotY()setRotationX()setRotationY()setScaleX()setScaleY()setAlpha() などがあります。

    一部のメソッドには、デフォルトの変換を適用するためにレイアウト ファイルで指定できる、対応する XML 属性もあります。使用可能な属性: translationXtranslationYrotationrotationXrotationYscaleXscaleYtransformPivotXtransformPivotYalpha

    これらの新しいビュー プロパティの一部を新しいアニメーション フレームワーク(上記で説明)と組み合わせて使用すると、見栄えのよいアニメーションを簡単にビューに適用できます。たとえば、ビューを y 軸で回転するには、ObjectAnimatorView、rotationY プロパティ、開始値と終了値を指定します。

    Kotlin

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }
    

    Java

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
    
  • 新しいホログラフィック テーマ

    標準のシステム ウィジェットと全体的なデザインが再設計され、新しい「ホログラフィック」ユーザー インターフェース テーマが組み込まれています。システムは、標準のスタイルとテーマのシステムを使用して新しいテーマを適用します。

    Android 3.0 プラットフォームをターゲットとするアプリは、android:minSdkVersion または android:targetSdkVersion の値を "11" に設定して、デフォルトでホログラフィック テーマを継承します。ただし、アプリが独自のテーマも適用する場合は、ホログラフィック テーマを継承するようにスタイルを更新しない限り、テーマはホログラフィック テーマをオーバーライドします。

    ホログラフィック テーマを個々のアクティビティに適用するか、独自のテーマ定義で継承するには、いくつかの新しい Theme.Holo テーマのいずれかを使用します。アプリが 3.0 より前のバージョンの Android と互換性があり、カスタムテーマを適用する場合は、プラットフォームのバージョンに基づいてテーマを選択する必要があります。

  • 新しいウィジェット
    • AdapterViewAnimator

      ビューの切り替え時にアニメーションを実行する AdapterView の基本クラス。

    • AdapterViewFlipper

      追加された 2 つ以上のビュー間でアニメーション化するシンプルな ViewAnimator。一度に表示される子は 1 つだけです。リクエストに応じて、一定の間隔で各子を自動的に切り替えられます。

    • CalendarView

      ユーザーが日付をタップしてカレンダーから日付を選択できるようにします。また、カレンダーを目的の日付にスクロールまたはフリングできます。ウィジェットで利用可能な日付の範囲を設定できます。

    • ListPopupWindow

      自身をホストビューに固定し、EditText ビューへの入力時に候補リストなどの選択肢リストを表示します。

    • NumberPicker

      ユーザーは事前定義された範囲から数値を選択できます。ウィジェットには、入力フィールドと、数値を選択するための上下ボタンがあります。入力フィールドをタップすると、値をスクロールできます。また、もう一度タップして現在の値を直接編集できます。また、位置を文字列にマッピングし、インデックスの位置ではなく、対応する文字列を表示することもできます。

    • PopupMenu

      ビューに固定されたモーダル ポップアップ ウィンドウに Menu を表示します。ポップアップは、スペースがある場合はアンカービューの下、スペースがない場合はアンカービューの上に表示されます。IME(ソフト キーボード)が表示されている場合、ユーザーがメニューをタップするまで、ポップアップは IME に重ねて表示されません。

    • SearchView

      指定されたアクティビティに検索クエリを配信し、検索候補を表示するように構成できる検索ボックスを提供します(従来の検索ダイアログと同じ方法)。このウィジェットは、アクションバー内に検索ウィジェットを表示する場合に特に便利です。詳細については、検索インターフェースの作成をご覧ください。

    • StackView

      子を 3D スタックで表示し、ユーザーが Rololodex のようにビューをスワイプできるようにするビュー。

グラフィック

  • ハードウェア アクセラレーションによる 2D グラフィックス

    マニフェスト要素の <application> 要素または個々の <activity> 要素で android:hardwareAccelerated="true" を設定することで、アプリで OpenGL レンダラを有効にできるようになりました。

    このフラグを使用すると、アプリケーションの描画を高速化できます。これにより、アニメーションがより滑らかになり、スクロールが滑らかになり、全体的にパフォーマンスとユーザー操作に対する応答が向上します。

  • ハードウェア レイヤとソフトウェア レイヤのサポートを確認する

    デフォルトでは、View にはレイヤが指定されていません。setLayerType() または layerType 属性を使用して、LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE の値で指定されるハードウェア レイヤまたはソフトウェア レイヤでビューをバックアップするように指定できます。

    ハードウェア レイヤは、ハードウェア固有のテクスチャ(通常は OpenGL ハードウェア上のフレーム バッファ オブジェクトまたは FBO)を基盤とし、Android のハードウェア レンダリング パイプラインを使用してビューをレンダリングします。ただし、ビュー階層に対してハードウェア アクセラレーションがオンになっている必要があります。ハードウェア アクセラレーションがオフの場合、ハードウェア レイヤはソフトウェア レイヤとまったく同じように動作します。

    ソフトウェア レイヤはビットマップを基盤としており、ハードウェア アクセラレーションが有効になっている場合でも、Android のソフトウェア レンダリング パイプラインを使用してビューをレンダリングします。影響を受けるビューツリーが頻繁に更新される場合は、ソフトウェア レイヤを使用しないようにします。更新のたびにソフトウェア レイヤの再レンダリングが必要になり、時間がかかることがあります。

    詳細については、LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE のドキュメントをご覧ください。

  • RenderScript 3D グラフィック エンジン

    RenderScript は、3D シーンを作成するための API と、パフォーマンスを最大化するためのプラットフォームに依存しない特別なシェーダー言語の両方を提供する、ランタイム 3D フレームワークです。RenderScript を使用すると、グラフィック オペレーションとデータ処理を高速化できます。Renderscript は、アプリ、壁紙、カルーセルなどの高性能 3D 効果を作成するための理想的な方法です。

    詳しくは、Renderscript を使用した 3D レンダリングと計算のドキュメントをご覧ください。

Media

  • タイムラプス動画

    Camcorder API で、タイムラプス動画を録画する機能がサポートされるようになりました。setCaptureRate() は、フレームをキャプチャするレートを設定します。

  • 画像ストリームのテクスチャのサポート

    新しい SurfaceTexture を使用すると、画像ストリームを OpenGL ES テクスチャとしてキャプチャできます。Camera インスタンスで setPreviewTexture() を呼び出すことで、カメラから動画再生やプレビュー フレームを描画する SurfaceTexture を指定できます。

  • HTTP ライブ ストリーミング

    アプリは、M3U 再生リストの URL をメディア フレームワークに渡して、HTTP ライブ ストリーミング セッションを開始できるようになりました。メディア フレームワークは、アダプティブ ビットレートなど、HTTP Live ストリーミング仕様のほとんどをサポートしています。詳しくは、サポートされているメディア形式のドキュメントをご覧ください。

  • EXIF データ

    ExifInterface には、写真の絞り、ISO、露出時間の新しいフィールドが含まれています。

  • ビデオカメラのプロファイル

    新しい hasProfile() メソッドといくつかの動画品質プロファイル(QUALITY_1080PQUALITY_720PQUALITY_CIF など)を使用すると、カムコーダーの画質オプションを決定できます。

  • デジタル メディア ファイル転送

    このプラットフォームには、USB 経由でのメディア/画像転送プロトコル(MTP/PTP)のサポートが組み込まれています。これにより、ユーザーはデバイス間やホスト コンピュータ間で、あらゆる種類のメディア ファイルを簡単に転送できます。デベロッパーはこのサポートを基盤として、デバイス間で転送または共有するリッチメディア ファイルをユーザーが作成または管理できるアプリケーションを作成できます。

  • デジタル著作権管理(DRM)

    デジタル著作権を確認、適用するための新しい拡張可能なデジタル著作権管理(DRM)フレームワーク。これは、次の 2 つのアーキテクチャ レイヤに実装されています。

    • DRM フレームワーク API。アプリに公開され、標準アプリ用に Dalvik VM を介して実行されます。
    • フレームワーク API を実装し、DRM プラグインのインターフェースを公開して、さまざまな DRM スキームの権利管理と復号を処理するネイティブ コード DRM マネージャー。

    アプリケーション デベロッパー向けには、保護されたコンテンツの管理を簡素化する抽象化された統合 API が用意されています。この API は、DRM オペレーションの複雑さを隠し、保護されたコンテンツと保護されていないコンテンツの両方、そしてさまざまな DRM スキームにわたって一貫したオペレーション モードを可能にします。

    デバイス メーカー、コンテンツ所有者、インターネット デジタル メディア プロバイダは、DRM フレームワークのプラグイン API を使用して、選択した DRM スキームのサポートを Android システムに追加して、コンテンツ保護を安全に適用できます。

    プレビュー リリースでは、デジタル著作権を確認、適用するためのネイティブ DRM プラグインは提供されていません。ただし、デバイス メーカーがデバイスに DRM プラグインを同梱している場合があります。

    すべての DRM API は、android.drm パッケージに含まれています。

キーボードのサポート

  • Control、Meta、Caps Lock、Num Lock、Scroll Lock の修飾子をサポート。詳細については、META_CTRL_ON と関連フィールドをご覧ください。
  • Esc、Home、End、Delete などのキーのサポートを含む、デスクトップ スタイルのフル キーボードをサポートします。キーイベントがフルキーボードからのものかどうかを判断するには、getKeyboardType() をクエリして KeyCharacterMap.FULL をチェックします。
  • TextView は、Ctrl+X、Ctrl+C、Ctrl+V、Ctrl+A のキーの組み合わせを使用して、キーボードベースの切り取り、コピー、貼り付け、すべて選択をサポートするようになりました。PageUp/PageDown、Home/End、キーボードを使用したテキスト選択もサポートしています。
  • KeyEvent に、キー修飾子の状態を正確かつ一貫性のある方法で簡単に確認できるように、いくつかの新しいメソッドが追加されています。hasModifiers(int)hasNoModifiers()metaStateHasModifiers()metaStateHasNoModifiers() をご覧ください。
  • アプリでカスタム キーボード ショートカットを実装するには、ActivityDialog、または View をサブクラス化して onKeyShortcut() を実装します。キーが Ctrl キーと結合されるたびに、フレームワークがこのメソッドを呼び出します。オプション メニューを作成するときに、各 <item> 要素に android:alphabeticShortcut 属性または android:numericShortcut 属性を設定する(または setShortcut() を使用して)キーボード ショートカットを登録できます。
  • Android 3.0 には、ID が KeyCharacterMap.VIRTUAL_KEYBOARD の新しい「仮想キーボード」デバイスが含まれています。仮想キーボードには、デスクトップ スタイルの US キーマップがあります。これは、入力のテストでキーイベントを統合する際に便利です。

分割タッチイベント

これまでは、一度に 1 つのビューしかタッチイベントに対応できませんでした。Android 3.0 では、ビュー間やウィンドウ間でタッチイベントを分割するサポートが追加され、異なるビューが同時タッチイベントに対応できるようになりました。

Android 3.0 をターゲットとするアプリの場合、分割タッチイベントはデフォルトで有効になります。つまり、アプリが android:minSdkVersion 属性または android:targetSdkVersion 属性の値を "11" に設定した場合です。

ただし、次のプロパティを使用すると、特定のビューグループ内やウィンドウ間のビュー間でのタッチイベントの分割を無効にできます。

  • ビューグループの android:splitMotionEvents 属性を使用すると、レイアウト内の子ビュー間で発生するスプリット タッチイベントを無効にできます。次に例を示します。
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>
    

    このように、線形レイアウトの子ビューはタッチイベントを分割できません。一度に 1 つのビューしかタッチイベントを受け取れません。

  • android:windowEnableSplitTouch スタイル プロパティを使用すると、アクティビティまたはアプリ全体のテーマに適用して、ウィンドウ間での分割タッチイベントを無効にできます。次に例を示します。
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>
    

    このテーマを <activity> または <application> に適用すると、現在のアクティビティ ウィンドウ内のタッチイベントのみが受け入れられます。たとえば、ウィンドウ間での分割タッチイベントを無効にすると、システムバーはアクティビティと同時にタッチイベントを受け取ることができなくなります。これは、アクティビティ内のビューがタッチイベントを分割できるかどうかには影響しません。デフォルトでは、アクティビティは引き続きビュー間でタッチイベントを分割できます。

    テーマの作成について詳しくは、スタイルとテーマの適用をご覧ください。

Webkit

  • WebView で構成されるフラグメントを作成するための新しい WebViewFragment クラス。
  • 新しい WebSettings メソッド:
    • setDisplayZoomControls() を使用すると、画面上のズーム コントロールを非表示にしながら、ユーザーは指操作でズームできます(setBuiltInZoomControls()true に設定する必要があります)。
    • 新しい WebSettings メソッドである setEnableSmoothTransition() を使用すると、パンやズームの際にスムーズな遷移を行うことができます。有効にすると、WebView はパフォーマンスを最大化するソリューションを選択します(たとえば、WebView のコンテンツが遷移中に更新されない場合があります)。
  • 新しい WebView メソッド:
    • onPause() コールバック: WebView が非表示になったときに、WebView に関連する処理を一時停止します。これは、WebView がフォアグラウンドにないときに不要な CPU トラフィックやネットワーク トラフィックを減らすのに役立ちます。
    • onResume() コールバック。onPause() の間に一時停止された WebView に関連付けられた処理を再開します。
    • saveWebArchive() を使用すると、現在のビューをウェブ アーカイブとしてデバイスに保存できます。
    • showFindDialog() は、現在のビューでテキスト検索を開始します。

ブラウザ

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

  • メディア キャプチャ

    HTML Media Capture の仕様で定義されているように、ブラウザはウェブ アプリケーションからデバイスの音声、画像、動画のキャプチャ機能にアクセスできます。たとえば、次の HTML は、アップロードする写真を撮影するための入力をユーザーに提供します。

    <input type="file" accept="image/*;capture=camera" />
    

    または、capture=camera パラメータを除外することで、ユーザーはカメラで新しい画像をキャプチャするか、デバイスから(ギャラリー アプリなどで)画像を選択するかを選択できます。

  • デバイスの向き

    デバイス画面の向きイベントの仕様で定義されているように、ブラウザでは、デバイスの物理的な向きと動作に関する情報を提供する DOM イベントを、ウェブ アプリケーションでリッスンできます。

    デバイスの向きは x 軸、y 軸、z 軸で度数で表され、運動は加速度データと回転速度データで表現されます。ウェブページは、イベントタイプ "deviceorientation"window.addEventListener を呼び出して向きのイベントを登録し、"devicemotion" イベントタイプを登録してモーション イベントを登録できます。

  • CSS 3D 変換

    CSS 3D Transform Module 仕様で定義されているように、ブラウザでは CSS によってレンダリングされた要素を 3 次元で変換できます。

JSON ユーティリティ

JsonReaderJsonWriter という新しいクラスが、JSON ストリームの読み取りと書き込みに利用できるようになりました。新しい API は、メモリ内のドキュメントを操作する org.json クラスを補完します。

JsonReader のインスタンスを作成するには、そのコンストラクタ メソッドを呼び出し、JSON 文字列を入力する InputStreamReader を渡します。次に、beginObject() を呼び出してオブジェクトの読み取りを開始し、nextName() でキー名を読み取り、型に応じたメソッド(nextString()nextInt() など)を使用して値を読み取り、hasNext() が true である間に読み取りを続けます。

JsonWriter のインスタンスを作成するには、そのコンストラクタを呼び出して適切な OutputStreamWriter を渡します。次に、読み取りと同様の方法で JSON データを書き込みます。name() を使用してプロパティ名を追加し、適切な value() メソッドを使用してそれぞれの値を追加します。

これらのクラスはデフォルトで厳格になっています。各クラスの setLenient() メソッドは、受け入れるものがリベラルになるように構成します。この寛容な解析モードは、org.json のデフォルト パーサーとも互換性があります。

新機能の定数

<uses-feature> Manfest 要素は、アプリが依存しているハードウェア機能とソフトウェア機能のセットを外部エンティティ(Google Play など)に通知するために使用します。このリリースでは、アプリがこの要素で宣言できる次の新しい定数が追加されています。

  • "android.hardware.faketouch"

    宣言されている場合、エミュレートされたタッチスクリーン以上を提供するデバイスとアプリが互換性があることを示します。エミュレートされたタッチスクリーンを備えたデバイスは、タッチスクリーン機能のサブセットをエミュレートできるユーザー入力システムを備えています。このような入力システムの例として、画面上のカーソルを操作するマウスやリモコンがあります。このような入力システムは、下へのクリック、上へのクリック、ドラッグなどの基本的なタッチイベントをサポートしています。ただし、より複雑な入力タイプ(ジェスチャー、フリングなど)は、疑似タップデバイスではより困難または不可能になる可能性があります(また、マルチタッチ ジェスチャーは不可能です)。

    アプリで複雑な操作が不要で、タッチスクリーンをエミュレートしたデバイスからアプリを除外しない場合は、<uses-feature> 要素を使用して "android.hardware.faketouch" を宣言する必要があります。これにより、エミュレートされたタッチスクリーン入力のみを提供するものを含め、多数のデバイスタイプでアプリを使用できるようになります。

    タッチスクリーン機能は疑似タップ機能のスーパーセットであるため、タッチスクリーンを含むデバイスはすべて "android.hardware.faketouch" もサポートしています。そのため、実際にタッチスクリーンが必要でない限り、疑似タップ用の <uses-feature> 要素を追加する必要があります。

新しい権限

  • "android.permission.BIND_REMOTEVIEWS"

    これは、RemoteViewsService の実装の <service> マニフェスト要素で必要な権限として宣言する必要があります。たとえば、RemoteViewsService を使用してコレクション ビューにデータを入力するアプリ ウィジェットを作成する場合、マニフェスト エントリは次のようになります。

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />
    

新しいプラットフォーム テクノロジー

  • ストレージ
    • オンボード eMMC ストレージを有効にするための ext4 ファイル システムのサポート。
    • MTP デバイスをサポートする FUSE ファイル システム。
    • キーボードと USB ハブをサポートする USB ホストモードのサポート。
    • MTP/PTP のサポート
  • Linux カーネル
    • 2.6.36 にアップグレードしました
  • Dalvik VM
    • SMP をサポートおよび最適化する新しいコード
    • JIT インフラストラクチャのさまざまな改善
    • ガベージ コレクタの改善:
      • SMP 向けチューニング
      • より大きなヒープサイズのサポート
      • ビットマップとバイトバッファの統合処理
  • Dalvik Core ライブラリ
    • NIO(最新の I/O ライブラリ)の実装が大幅に高速化
    • 例外メッセージの改善
    • 全体にわたる正確性とパフォーマンスの修正

API の差異レポート

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

API レベル

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

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

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