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

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

フラグメント

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

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

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

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

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

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

フラグメントの使用について詳しくは、フラグメントのドキュメントをご覧ください。 API デモ アプリでは、複数のサンプルも提供されています。

アクションバー

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

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

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

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

    メニュー項目の 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 つのエンティティを表す 1 つ以上の ClipData.Item オブジェクトを保持します。1 つの ClipData.Item のみを含む ClipData オブジェクトを作成するには、newPlainText()newUri()newIntent() などのいずれかのヘルパー メソッドを使用できます。このメソッドは、それぞれが指定した ClipData.Item をプリロードした ClipData オブジェクトを返します。

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

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

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

詳しくは、コピーと貼り付けのドキュメントをご覧ください。コピー&ペーストの単純な実装は API デモサンプルにあります。より完全な実装は Note Pad サンプルでも確認できます。

ドラッグ&ドロップ

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

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

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

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

注: ドラッグ イベントで ClipData オブジェクトを処理することはできますが、システムのクリップボードとは関係ありません。ドラッグ&ドロップ オペレーションでは、ドラッグされたデータがシステムのクリップボードに配置されることはありません。

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

アプリ ウィジェット

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

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

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

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

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 のプロファイル定数と BluetoothProfile.ServiceListener を指定して getProfileProxy() を呼び出すことで、Bluetooth クライアントが接続または切断されたときにコールバックを受信できます。

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

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

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

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

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

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

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

拡張 UI フレームワーク

  • ListView と GridView の多肢選択式

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

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

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

    多肢選択式の例については、API デモサンプル アプリケーションの 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 スタックで表示し、ユーザーが rolodex のようにビューをスワイプできるようにするビュー。

グラフィック

  • ハードウェア アクセラレーションによる 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() をご覧ください。
  • ActivityDialogView をサブクラス化して onKeyShortcut() を実装することで、アプリにカスタム キーボード ショートカットを実装できます。キーと Control キーとが結合されるたびに、フレームワークがこのメソッドを呼び出します。オプション メニューを作成する際、各 <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 がフォアグラウンドでないときに不要な CPU トラフィックやネットワーク トラフィックを削減するのに役立ちます。
    • onResume() コールバック。onPause() の間に一時停止した WebView に関連付けられた処理を再開します。
    • saveWebArchive() を使用すると、現在のビューをウェブ アーカイブとしてデバイスに保存できます。
    • showFindDialog() は、現在のビューでテキスト検索を開始します。

Browser

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

  • メディア キャプチャ

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

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

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

  • デバイスの向き

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

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

  • CSS 3D 変換

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

JSON ユーティリティ

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

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

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

デフォルトでは、これらのクラスは厳格です。各クラスの 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 レベルとはをご覧ください。