Android 5.0 API

API レベル: 21

Android 5.0(LOLLIPOP)では、ユーザーとアプリ デベロッパー向けの新機能が提供されます。このドキュメントでは、最も注目すべき新しい API の概要について説明します。

公開中のアプリについては、アプリ内で考慮すべき Android 5.0 の動作変更をご確認ください。これらの動作変更は、新しい API を使用していない場合、または新機能をターゲットとしていない場合でも、Android 5.0 デバイス上のアプリに影響する可能性があります。

新しいプラットフォーム機能の概要については、Android Lollipop のハイライトをご覧ください。

開発する

Android 5.0 向けのアプリを作成するには、まず Android SDK を入手する必要があります。次に、SDK Manager を使用して Android 5.0 SDK プラットフォームとシステム イメージをダウンロードします。

対象 API レベルを更新する

Android 5.0 搭載デバイス向けにアプリをより適切に最適化するには、targetSdkVersion"21" に設定し、Android 5.0 システム イメージにアプリをインストールしてテストし、この変更を反映した更新版アプリを公開します。

Android 5.0 API を使用しながら古いバージョンもサポートするには、minSdkVersion でサポートされていない API を実行する前に、システムの API レベルをチェックする条件をコードに追加します。下位互換性の維持について詳しくは、異なるプラットフォーム バージョンのサポートをご覧ください。

API レベルの仕組みについて詳しくは、API レベルとはをご覧ください。

重要な動作変更

以前に Android 向けのアプリを公開したことがある場合は、Android 5.0 での変更によってアプリが影響を受ける可能性があることに留意してください。

詳しくは、Android 5.0 の変更点をご覧ください。

ユーザー インターフェース

マテリアル デザインのサポート

Android 5.0 では、Android の新しいマテリアル デザイン スタイルのサポートが追加されています。マテリアル デザインを使用して、視覚的に動的で、ユーザーにとって自然に UI 要素が遷移するアプリを作成できます。このサポートには以下が含まれます。

  • マテリアル テーマ
  • ビュー シャドウ
  • RecyclerView ウィジェット
  • ドローアブル アニメーションとスタイル設定効果
  • マテリアル デザインのアニメーションとアクティビティ遷移効果
  • ビューの状態に基づくビュー プロパティのアニメーター
  • カスタマイズ可能な UI ウィジェットと、自分でカラーパレットを制御できるアプリバー
  • XML ベクター グラフィックに基づくアニメーション ドローアブルと非アニメーション ドローアブル

アプリにマテリアル デザイン機能を追加する方法について詳しくは、マテリアル デザインをご覧ください。

最近使用したドキュメントの同時実行中のドキュメントとアクティビティ

以前のリリースでは、最近の画面には、ユーザーが最後に操作したアプリごとに 1 つのタスクしか表示できませんでした。これにより、アプリは、ドキュメントの追加の同時実行アクティビティに備えて、必要に応じてより多くのタスクを開くことができます。この機能により、ユーザーは [最近] 画面から個々のアクティビティとドキュメントをすばやく切り替えられ、すべてのアプリで一貫した切り替え操作が可能になるため、マルチタスクが簡単になります。このような同時タスクの例としては、ウェブブラウザ アプリで開いているタブ、生産性向上アプリでのドキュメント、ゲームでの同時対戦、メッセージ アプリでのチャットなどがあります。アプリは ActivityManager.AppTask クラスを使用してタスクを管理できます。

論理ブレークを挿入してシステムがアクティビティを新しいタスクとして扱うようにするには、startActivity() でアクティビティを起動するときに FLAG_ACTIVITY_NEW_DOCUMENT を使用します。この動作は、マニフェストで <activity> 要素の documentLaunchMode 属性を "intoExisting" または "always" に設定することによっても実現できます。

[最近] 画面が見やすくなるよう、アプリに表示できるタスクの最大数を設定できます。そのためには、<application> 属性 android:maxRecents を設定します。現在指定できる最大タスク数は、ユーザー 1 人あたり 50 個(低 RAM デバイスの場合は 25 個)です。

[最近使用したアイテム] 画面のタスクは、再起動後も保持されるように設定できます。永続性の動作を制御するには、android:persistableMode 属性を使用します。また、setTaskDescription() メソッドを呼び出して、最近使用した画面におけるアクティビティの視覚的プロパティ(アクティビティの色、ラベル、アイコンなど)を変更することもできます。

WebView の更新

Android 5.0 では WebView の実装が Chromium M37 に更新され、セキュリティと安定性が強化され、バグが修正されました。Android 5.0 で実行される WebView のデフォルトのユーザー エージェント文字列が更新され、バージョン番号として 37.0.0.0 が組み込まれました。

このリリースで PermissionRequest クラスが導入され、アプリは getUserMedia() などのウェブ API を使用して、カメラやマイクなどの保護されたリソースにアクセスするための WebView 権限を付与できるようになります。WebView に権限を付与するには、これらのリソースに対する適切な Android 権限をアプリに付与する必要があります。

新しい onShowFileChooser() メソッドにより、WebView で入力フォーム フィールドを使用し、ファイル選択ツールを起動して Android デバイスから画像やファイルを選択できるようになりました。

さらに、このリリースでは、WebAudioWebGLWebRTC のオープン標準もサポートされるようになりました。このリリースに含まれる新機能の詳細については、Android 用 WebView をご覧ください。

画面のキャプチャと共有

Android 5.0 では、新しい android.media.projection API を使用して、画面キャプチャ機能と画面共有機能をアプリに追加できます。この機能は、ビデオ会議アプリで画面共有を有効にする場合などに便利です。

新しい createVirtualDisplay() メソッドを使用すると、アプリはメイン画面(デフォルト ディスプレイ)の内容を Surface オブジェクトにキャプチャし、それをネットワーク経由で送信できます。この API では、保護されていない画面コンテンツのみをキャプチャでき、システム音声はキャプチャできません。画面のキャプチャを開始するには、まず、createScreenCaptureIntent() メソッドで取得した Intent を使用してスクリーン キャプチャ ダイアログを起動し、ユーザーの権限をリクエストする必要があります。

新しい API の使用例については、サンプル プロジェクトの MediaProjectionDemo クラスをご覧ください。

通知

ロック画面の通知

Android 5.0 のロック画面には、通知を表示する機能があります。ユーザーは [設定] から、機密性の高い通知コンテンツをセキュアロック画面に表示するかどうかを選択できます。

アプリでは、セキュアロック画面に通知が表示される際に表示される詳細レベルを制御できます。公開設定レベルを制御するには、setVisibility() を呼び出して、次のいずれかの値を指定します。

  • VISIBILITY_PRIVATE: 通知のアイコンなどの基本情報は表示されますが、通知のすべての内容は表示しません。
  • VISIBILITY_PUBLIC: 通知の全内容を表示します。
  • VISIBILITY_SECRET: 通知のアイコンも含めて何も表示しません。

公開設定を VISIBILITY_PRIVATE にすると、個人情報を非表示にする、編集済みの通知コンテンツを提供することもできます。たとえば、SMS アプリでは、「新しいテキスト メッセージが 3 件あります」という通知は表示されますが、メッセージの内容と送信者は非表示になります。この代替通知を提供するには、まず Notification.Builder を使用して交換通知を作成します。非公開通知オブジェクトを作成するときに、setPublicVersion() メソッドを使用して置換通知をオブジェクトに関連付けます。

通知メタデータ

Android 5.0 では、アプリの通知に関連付けられたメタデータを使用して、通知をよりインテリジェントに並べ替えます。メタデータを設定するには、通知を作成するときに Notification.Builder で次のメソッドを呼び出します。

  • setCategory(): デバイスが優先モードの場合のアプリ通知の処理方法をシステムに指示します(たとえば、通知が着信、インスタント メッセージ、アラームを表す場合)。
  • setPriority(): 通知に通常の通知よりも重要度を高くするか下げるかを指定します。 優先度フィールドが PRIORITY_MAX または PRIORITY_HIGH に設定された通知は、通知に音やバイブレーションも機能している場合、小さなフローティング ウィンドウに表示されます。
  • addPerson(): 通知に関連する 1 人以上のユーザーを追加できます。アプリはこれを使用して、指定した人からの通知をグループ化するか、それらの人からの通知をより重要としてランク付けすべきであることをシステムに伝えることができます。

グラフィック

OpenGL ES 3.1 のサポート

Android 5.0 では、Java インターフェースと OpenGL ES 3.1 のネイティブ サポートが追加されています。OpenGL ES 3.1 の主な新機能は次のとおりです。

  • コンピューティング シェーダー
  • 個別のシェーダー オブジェクト
  • 間接描画コマンド
  • マルチサンプル テクスチャとステンシル テクスチャ
  • シェーディング言語の改善
  • 高度なブレンドモードとデバッグのための拡張機能
  • OpenGL ES 2.0 および 3.0 との下位互換性

Android 上の OpenGL ES 3.1 用の Java インターフェースは、GLES31 によって提供されます。OpenGL ES 3.1 を使用する場合は、マニフェスト ファイルで <uses-feature> タグと android:glEsVersion 属性を使用して宣言してください。次に例を示します。

<manifest>
    <uses-feature android:glEsVersion="0x00030001" />
    ...
</manifest>

デバイスでサポートされている OpenGL ES バージョンを実行時にチェックする方法など、OpenGL ES の使用について詳しくは、OpenGL ES API ガイドをご覧ください。

Android 拡張機能パック

このリリースでは、OpenGL ES 3.1 に加えて、Java インターフェースと高度なグラフィック機能のネイティブ サポートを含む拡張機能パックが提供されます。Android では、これらの拡張機能は 1 つのパッケージとして扱われます。(ANDROID_extension_pack_es31a 拡張機能が存在する場合、アプリはパッケージ内のすべての拡張機能が存在すると想定し、1 つの #extension ステートメントでシェーディング言語機能を有効にできます)。

拡張機能パックは以下をサポートしています。

  • シェーダー ストレージ バッファ、画像、アトミックに対するフラグメント シェーダーの保証サポート(OpenGL ES 3.1 では、フラグメント シェーダーのサポートはオプションです)。
  • テッセレーション シェーダーとジオメトリ シェーダー
  • ASTC(LDR)テクスチャ圧縮形式
  • サンプルごとの補間とシェーディング
  • フレーム バッファ内のカラー アタッチメントごとに異なるブレンドモード

拡張機能パックの Java インターフェースは、GLES31Ext で提供されます。アプリ マニフェストで、拡張機能パックをサポートするデバイスにのみアプリをインストールする必要があることを宣言できます。 次に例を示します。

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

Media

高度なカメラ機能のための Camera API

Android 5.0 では、新しい android.hardware.camera2 API が導入され、写真のきめ細かなキャプチャや画像処理が容易になります。getCameraIdList() を使用してシステムで使用可能なカメラデバイスにプログラムでアクセスし、openCamera() を使用して特定のデバイスに接続できるようになりました。画像のキャプチャを開始するには、CameraCaptureSession を作成し、キャプチャした画像を送信する Surface オブジェクトを指定します。CameraCaptureSession は、1 回の撮影または複数の画像を連続撮影するように構成できます。

新しい画像がキャプチャされたときに通知を受け取るには、CameraCaptureSession.CaptureCallback リスナーを実装してキャプチャ リクエストで設定します。これで、システムが画像キャプチャ リクエストを完了すると、CameraCaptureSession.CaptureCallback リスナーが onCaptureCompleted() の呼び出しを受け取り、CaptureResult に画像キャプチャ メタデータを提供します。

CameraCharacteristics クラスを使用すると、デバイスで使用できるカメラ機能をアプリで検出できます。オブジェクトの INFO_SUPPORTED_HARDWARE_LEVEL プロパティは、カメラの機能レベルを表します。

  • すべてのデバイスは少なくとも INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY ハードウェア レベルをサポートしています。その機能は、サポートが終了した Camera API とほぼ同じです。
  • INFO_SUPPORTED_HARDWARE_LEVEL_FULL ハードウェア レベルをサポートするデバイスは、キャプチャと後処理を手動で制御し、高フレームレートで高解像度画像をキャプチャできます。

更新された Camera API の使用方法については、このリリースの Camera2BasicCamera2Video の実装サンプルをご覧ください。

オーディオの再生

このリリースには、AudioTrack に対する次の変更が含まれています。

  • アプリからオーディオ データを浮動小数点形式(ENCODING_PCM_FLOAT)で供給できるようになりました。これにより、ダイナミック レンジを拡大し、精度を保ち、ヘッドルームを拡大できます。浮動小数点演算は、中間計算中に特に役立ちます。再生エンドポイントは、音声データに整数形式を使用し、ビット深度を低くします。(Android 5.0 では、内部パイプラインの一部はまだ浮動小数点数ではありません)。
  • これで、アプリから音声データを ByteBuffer として、MediaCodec と同じ形式で提供できるようになりました。
  • アプリによっては、WRITE_NON_BLOCKING オプションを使用することでバッファリングとマルチスレッド処理を簡素化できます。

メディア再生コントロール

新しい通知 API とメディア API を使用して、システム UI がメディア再生を認識し、アルバムアートを抽出して表示できるようにします。新しい MediaSession クラスと MediaController クラスにより、UI とサービス全体でメディア再生を簡単に制御できるようになりました。

新しい MediaSession クラスは、サポートが終了した RemoteControlClient クラスに代わるもので、トランスポート コントロールとメディアボタンを処理するためのコールバック メソッドの単一セットを提供します。アプリがメディア再生を備え、Android TV または Wear プラットフォームで動作する場合は、MediaSession クラスを使用し、同じコールバック メソッドでトランスポート コントロールを処理します。

新しい MediaController クラスを使用して、独自のメディア コントローラ アプリを作成できるようになりました。このクラスにより、アプリの UI プロセスからメディアの再生をモニタリングして制御するスレッドセーフな方法が提供されます。コントローラを作成するときに、アプリが特定の MediaSession を操作できるように、MediaSession.Token オブジェクトを指定します。MediaController.TransportControls メソッドを使用すると、play()stop()skipToNext()setRating() などのコマンドを送信して、そのセッションでのメディア再生を制御できます。コントローラを使用すると、MediaController.Callback オブジェクトを登録して、セッションでメタデータと状態の変化をリッスンすることもできます。

さらに、新しい Notification.MediaStyle クラスを使用すると、メディア セッションに再生コントロールを結びつけたリッチ通知を作成できます。

メディアの閲覧

Android 5.0 では、新しい android.media.browse API を使用して、別のアプリのメディア コンテンツ ライブラリをアプリでブラウジングできる機能が導入されています。アプリ内のメディア コンテンツを公開するには、MediaBrowserService クラスを拡張します。MediaBrowserService の実装で MediaSession.Token へのアクセスを提供し、サービスを通じて提供されるメディア コンテンツをアプリが再生できるようにする必要があります。

メディア ブラウザ サービスを操作するには、MediaBrowser クラスを使用します。MediaBrowser インスタンスを作成するときに、MediaSession のコンポーネント名を指定します。その後、アプリはそのブラウザ インスタンスを使用して、関連付けられたサービスに接続し、MediaSession.Token オブジェクトを取得して、そのサービスを通じて公開されたコンテンツを再生できます。

ストレージ

ディレクトリの選択

Android 5.0 ではストレージ アクセス フレームワークが拡張され、ユーザーがディレクトリ サブツリー全体を選択できるようになり、各アイテムについてユーザーの同意を求めることなく、含まれているすべてのドキュメントに対する読み取り/書き込みアクセス権をアプリに与えることができます。

ディレクトリ サブツリーを選択するには、OPEN_DOCUMENT_TREE インテントをビルドして送信します。サブツリーの選択をサポートするすべての DocumentsProvider インスタンスが表示され、ユーザーはディレクトリを参照して選択できるようになります。返される URI は、選択したサブツリーへのアクセスを表します。その後、buildChildDocumentsUriUsingTree()buildDocumentUriUsingTree()query() とともに使用して、サブツリーを探索できます。

新しい createDocument() メソッドを使用すると、サブツリーの任意の場所に新しいドキュメントやディレクトリを作成できます。既存のドキュメントを管理するには、renameDocument()deleteDocument() を使用します。これらの呼び出しを発行する前に、COLUMN_FLAGS をチェックして、プロバイダがこれらの呼び出しをサポートしていることを確認してください。

DocumentsProvider を実装していて、サブツリーの選択をサポートする場合は、isChildDocument() を実装し、COLUMN_FLAGSFLAG_SUPPORTS_IS_CHILD を含めます。

また、Android 5.0 では、共有ストレージ上にパッケージ固有の新しいディレクトリが導入されており、アプリは MediaStore に含めるメディア ファイルを配置できます。新しい getExternalMediaDirs() は、すべての共有ストレージ デバイス上のこれらのディレクトリへのパスを返します。getExternalFilesDir() と同様に、返されたパスにアクセスするためにアプリに追加の権限は必要ありません。プラットフォームはこれらのディレクトリ内の新しいメディアを定期的にスキャンしますが、MediaScannerConnection を使用して新しいコンテンツを明示的にスキャンすることもできます。

ワイヤレスと接続

複数のネットワーク接続

Android 5.0 には、アプリが特定の機能を持つ利用可能なネットワークを動的にスキャンし、接続を確立できる新しいマルチネットワーキング API が用意されています。この機能は、アプリが特殊なネットワーク(SUPL、MMS、携帯通信会社の請求ネットワークなど)を必要とする場合や、特定のタイプのトランスポート プロトコルを使用してデータを送信する場合に便利です。

アプリからネットワークを動的に選択して接続する手順は次のとおりです。

  1. ConnectivityManager を作成します。
  2. NetworkRequest.Builder クラスを使用して NetworkRequest オブジェクトを作成し、アプリが必要とするネットワーク機能とトランスポート タイプを指定します。
  3. 適切なネットワークをスキャンするには、requestNetwork() または registerNetworkCallback() を呼び出して、NetworkRequest オブジェクトと ConnectivityManager.NetworkCallback の実装を渡します。検出された適切なネットワークに能動的に切り替えたい場合は、requestNetwork() メソッドを使用します。積極的に切り替えることなく、スキャンされたネットワークに関する通知のみを受け取るには、registerNetworkCallback() メソッドを使用します。

システムは適切なネットワークを検出すると、そのネットワークに接続して onAvailable() コールバックを呼び出します。コールバックの Network オブジェクトを使用して、ネットワークに関する追加情報を取得したり、選択したネットワークを使用するようにトラフィックを転送したりできます。

Bluetooth Low Energy

Android 4.3 では、中心的な役割として Bluetooth Low EnergyBluetooth LE)のプラットフォーム サポートが導入されました。Android 5.0 では、Android デバイスが Bluetooth LE のペリフェラル デバイスとして機能できるようになりました。アプリは、この機能を使用して自身の存在を付近のデバイスに認識させることができます。たとえば、デバイスを歩数計やヘルス モニターとして機能させ、そのデータを別の Bluetooth LE デバイスと通信できるアプリを作成できます。

新しい android.bluetooth.le API を使用すると、アプリでアドバタイズメントのブロードキャスト、レスポンスのスキャン、付近の Bluetooth LE デバイスとの接続の形成を行うことができます。新しいアドバタイジング機能とスキャン機能を使用するには、マニフェストに BLUETOOTH_ADMIN 権限を追加します。ユーザーが Play ストアからアプリを更新またはダウンロードする際は、アプリに「Bluetooth 接続情報: Bluetooth の制御(付近の Bluetooth デバイスへのブロードキャストや情報の取得など)を許可する」権限を付与するよう求められます。

他のデバイスがアプリを検出できるように Bluetooth LE のアドバタイジングを開始するには、startAdvertising() を呼び出して、AdvertiseCallback クラスの実装を渡します。コールバック オブジェクトは、アドバタイジング オペレーションの成功または失敗のレポートを受け取ります。

Android 5.0 で導入された ScanFilter クラスにより、アプリは特定のタイプのデバイスのみをスキャンできます。Bluetooth LE デバイスのスキャンを開始するには、startScan() を呼び出して、フィルタのリストを渡します。メソッド呼び出しでは、Bluetooth LE アドバタイズが見つかったときに報告する ScanCallback の実装も指定する必要があります。

NFC の機能強化

Android 5.0 では、NFC をより幅広く柔軟に使用できるように、次の機能強化が追加されています。

  • Android ビームが [共有] メニューで利用できるようになりました。
  • invokeBeam() を呼び出すことで、アプリはユーザーのデバイスで Android ビームを呼び出し、データを共有できます。これにより、ユーザーが手動でデバイスを別の NFC 対応デバイスにタップしなくても、データ転送を完了できます。
  • 新しい createTextRecord() メソッドを使用して、UTF-8 テキストデータを含む NDEF レコードを作成できます。
  • 支払いアプリを開発している場合、registerAidsForService() を呼び出して NFC アプリケーション ID(AID)を動的に登録できるようになりました。また、setPreferredService() を使用して、特定のアクティビティがフォアグラウンドにある場合に使用する優先カード エミュレーション サービスを設定することもできます。

プロジェクト Volta

Android 5.0 では、新機能に加えて、バッテリー駆動時間の改善が重視されています。新しい API とツールを使用して、アプリの消費電力を把握し、最適化しましょう。

ジョブのスケジューリング

Android 5.0 では、新しい JobScheduler API を使用して、後で、または指定された条件(デバイスの充電時など)でシステムのジョブを非同期で実行するようにジョブを定義することで、バッテリー寿命を最適化できます。ジョブ スケジューリングは、次のような状況で役立ちます。

  • アプリがユーザーに提供しない処理を延期できる場合。
  • ユニットが電源に接続されているときに、実行したい処理がある。
  • アプリにネットワーク アクセスまたは Wi-Fi 接続を必要とするタスクがある。
  • 定期的なスケジュールでバッチとして実行するタスクが多数あるアプリ。

作業単位は、JobInfo オブジェクトによってカプセル化されます。このオブジェクトはスケジューリング条件を指定します。

JobInfo.Builder クラスを使用して、スケジュール設定されたタスクの実行方法を構成します。次のような特定の条件で動作するようにタスクをスケジュールできます。

  • デバイスの充電時に開始する
  • デバイスが定額制ネットワークに接続されたときに開始する
  • デバイスがアイドル状態のときに起動する
  • 特定の期限までに、または最低限の遅れで完了する

たとえば、次のようなコードを追加すると、定額制ネットワークでタスクを実行できます。

Kotlin

val uploadTask: JobInfo = JobInfo.Builder(
        jobId,
        serviceComponent /* JobService component */
).run {
    setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    build()
}
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(uploadTask)

Java

JobInfo uploadTask = new JobInfo.Builder(jobId,
                                         serviceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

デバイスの電力が安定している場合(つまり、電源接続後 2 分以上が経過していて、バッテリーが正常なレベルである場合)、システムは、ジョブの期限が切れていない場合でも、実行可能なスケジュール ジョブを実行します。

JobScheduler API の使用例については、このリリースの JobSchedulerSample 実装サンプルをご覧ください。

バッテリー使用量に関するデベロッパー ツール

新しい dumpsys batterystats コマンドでは、一意のユーザー ID(UID)ごとに整理された、デバイスのバッテリー使用量に関する興味深い統計データが生成されます。次のような統計情報があります。

  • バッテリー関連のイベントの履歴
  • デバイスのグローバル統計情報
  • UID とシステム コンポーネント別のおおよその消費電力
  • パケットあたりのアプリごとのモバイルのミリ秒数
  • システム UID に集約された統計情報
  • アプリ UID の集計統計情報

出力をカスタマイズするためのさまざまなオプションについては、--help オプションを使用してください。たとえば、デバイスが最後に充電された後の特定のアプリ パッケージのバッテリー使用量の統計情報を出力するには、次のコマンドを実行します。

$ adb shell dumpsys batterystats --charged <package-name>

dumpsys コマンドの出力で Battery Historian ツールを使用すると、ログから電源関連のイベントの HTML 表示を生成できます。この情報により、バッテリー関連の問題の把握と診断が容易になります。

職場や教育における Android

管理対象プロビジョニング

Android 5.0 には、エンタープライズ環境内でアプリを実行するための新機能が用意されています。ユーザーが既存の個人アカウントを持っている場合、デバイス管理者は、管理対象プロビジョニング プロセスを開始して、共存するが別の管理対象プロファイルをデバイスに追加できます。管理対象プロファイルに関連付けられているアプリは、ユーザーのランチャー、履歴画面、通知で、管理対象外のアプリと一緒に表示されます。

マネージド プロビジョニング プロセスを開始するには、IntentACTION_PROVISION_MANAGED_PROFILE を送信します。呼び出しが成功すると、システムは onProfileProvisioningComplete() コールバックをトリガーします。その後、setProfileEnabled() を呼び出して、この管理対象プロファイルを有効にできます。

管理対象プロファイルではデフォルトで、ごく一部のアプリのみが有効になっています。管理対象プロファイルに追加のアプリをインストールするには、enableSystemApp() を呼び出します。

ランチャー アプリを開発している場合は、新しい LauncherApps クラスを使用して、現在のユーザーと、関連する管理対象プロファイルの起動可能なアクティビティのリストを取得できます。ランチャーでアイコン ドローアブルに仕事用バッジを追加することで、管理対象アプリを視覚的に目立たせることができます。バッジアイコンを取得するには、getUserBadgedIcon() を呼び出します。

新機能の使用方法については、このリリースの BasicManagedProfile 実装サンプルをご覧ください。

デバイス オーナー

Android 5.0 では、デバイス所有者アプリをデプロイする機能が導入されています。デバイス所有者は特別なタイプのデバイス管理者であり、セカンダリ ユーザーの作成と削除、デバイスのグローバル設定の構成を行うことができます。デバイス所有者アプリは、DevicePolicyManager クラスのメソッドを使用して、管理対象デバイス上の構成、セキュリティ、アプリをきめ細かく制御できます。 デバイスに設定できるアクティブなデバイス オーナーは一度に 1 人のみです。

デバイス オーナーをデプロイして有効化するには、デバイスが未プロビジョニング状態のときに、プログラミング アプリからデバイスへの NFC データ転送を行う必要があります。このデータ転送では、マネージド プロビジョニングで説明されているプロビジョニング インテントと同じ情報が送信されます。

画面の固定

Android 5.0 では、新しい画面固定 API が導入され、ユーザーがタスクから離れることや、通知によって中断されることを一時的に制限できます。これは、たとえば、Android で重要度の高い評価要件をサポートする教育アプリを開発する場合や、単一用途またはキオスクアプリを開発する場合に使用できます。アプリで画面固定を有効にすると、アプリがこのモードを終了するまで、ユーザーは通知の表示、他のアプリへのアクセス、ホーム画面の表示ができなくなります。

画面固定を有効にするには、次の 2 つの方法があります。

  • 手動: [設定] > [セキュリティ] > [画面の固定] で画面固定を有効にし、[最近] 画面の緑色のピンアイコンをタップして、固定するタスクを選択できます。
  • プログラムによる方法: 画面固定をプログラムで有効にするには、アプリから startLockTask() を呼び出します。リクエスト元のアプリがデバイス オーナーでない場合は、確認を求めるメッセージがユーザーに表示されます。デバイス所有者アプリは、setLockTaskPackages() メソッドを呼び出して、ユーザーの確認手順なしでアプリを固定できるようになります。

タスクのロックが有効になっている場合、次のように動作します。

  • ステータスバーは空白で、ユーザー通知とステータス情報は非表示になります。
  • [ホーム] ボタンと [最近使ったアプリ] ボタンは表示されません。
  • 他のアプリは新しいアクティビティを起動できません。
  • 新しいタスクが作成されない限り、現在のアプリは新しいアクティビティを起動できます。
  • 画面固定がデバイス オーナーによって呼び出された場合、アプリが stopLockTask() を呼び出すまで、ユーザーはアプリにロックされたままになります。
  • 画面固定がデバイス オーナーではない別のアプリによって、またはユーザーによって直接有効になっている場合、ユーザーは [戻る] ボタンと [最近使用したアイテム] 両方のボタンを長押しすることで終了できます。

印刷フレームワーク

PDF をビットマップとしてレンダリングする

新しい PdfRenderer クラスを使用して、PDF ドキュメントのページを印刷用のビットマップ画像にレンダリングできるようになりました。システムが印刷可能なコンテンツを書き込むシーク可能(つまり、コンテンツにランダムにアクセスできる)ParcelFileDescriptor を指定する必要があります。アプリは、openPage() を使用してレンダリングするページを取得し、render() を呼び出して、開いている PdfRenderer.Page をビットマップに変換できます。ドキュメントの一部のみをビットマップ画像に変換する場合は、追加のパラメータを設定することもできます(たとえば、ドキュメントを拡大するタイル レンダリングを実装する場合)。

新しい API の使用例については、PdfRendererBasic サンプルをご覧ください。

システム

アプリの使用統計情報

新しい android.app.usage API を使用すると、Android デバイスでアプリの使用状況履歴にアクセスできるようになりました。この API は、サポートが終了した getRecentTasks() メソッドよりも詳細な使用状況情報を提供します。この API を使用するには、まずマニフェストで "android.permission.PACKAGE_USAGE_STATS" 権限を宣言する必要があります。また、ユーザーは [設定] > [セキュリティ] > [アプリ] から、使用状況へのアクセス権を使用して、このアプリのアクセスを有効にする必要があります。

システムは使用状況データをアプリごとに収集し、日次、週次、月次、年次の間隔でデータを集計します。システムがこのデータを保持する最大期間は次のとおりです。

  • 日次データ: 7 日
  • 週次データ: 4 週間
  • 月単位データ: 6 か月
  • 年単位のデータ: 2 年

アプリごとに、次のデータが記録されます。

  • アプリが最後に使用された時刻
  • 期間(日、週、月、年)にアプリがフォアグラウンドで動作していた合計時間
  • 1 日の間にコンポーネント(パッケージとアクティビティ名で識別される)がフォアグラウンドまたはバックグラウンドに移動したときにキャプチャされるタイムスタンプ
  • デバイス構成が変更されたとき(回転によってデバイスの向きが変化したときなど)にキャプチャされるタイムスタンプ

テストとユーザー補助

テストとユーザー補助機能の改善

Android 5.0 では、テストとユーザー補助機能に関する以下のサポートが追加されています。

  • 新しい getWindowAnimationFrameStats() メソッドと getWindowContentFrameStats() メソッドは、ウィンドウ アニメーションとコンテンツのフレーム統計情報をキャプチャします。これらのメソッドを使用すると、アプリがスムーズなユーザー エクスペリエンスを提供するのに十分な更新頻度でフレームをレンダリングしているかどうかを評価するインストルメンテーション テストを作成できます。
  • 新しい executeShellCommand() メソッドを使用すると、インストルメンテーション テストからシェルコマンドを実行できます。コマンドの実行は、デバイスに接続されているホストから adb shell を実行する場合と同様で、dumpsysamcontentpm などのシェルベースのツールを使用できます。
  • ユーザー補助 API を使用するユーザー補助サービスとテストツール(UiAutomator など)で、目の見えるユーザーが操作できる画面上のウィンドウのプロパティに関する詳細情報を取得できるようになりました。AccessibilityWindowInfo オブジェクトのリストを取得するには、新しい getWindows() メソッドを呼び出します。
  • 新しい AccessibilityNodeInfo.AccessibilityAction クラスを使用すると、AccessibilityNodeInfo で実行する標準アクションまたはカスタマイズされたアクションを定義できます。新しい AccessibilityNodeInfo.AccessibilityAction クラスは、以前 AccessibilityNodeInfo に含まれていたアクション関連の API に代わるものです。
  • Android 5.0 では、アプリのテキスト読み上げの合成をよりきめ細かく制御できます。新しい Voice クラスを使用すると、特定の言語 / 地域、品質とレイテンシの評価、テキスト読み上げエンジン固有のパラメータに関連付けられた音声プロファイルをアプリで使用できます。

IME

入力言語の切り替えがより簡単に

Android 5.0 以降では、プラットフォームでサポートされているすべてのインプット メソッド エディタ(IME)を簡単に切り替えることができます。指定された切り替えアクション(通常はソフト キーボードの地球アイコンをタップ)を実行すると、そのすべての IME が循環します。この動作変更は、shouldOfferSwitchingToNextInputMethod() メソッドによって実装されます。

さらに、フレームワークは、次の IME に切り替えメカニズムがまったく含まれているかどうか(つまり、その IME がその後の IME への切り替えをサポートしているかどうか)を確認するようになりました。切り替えメカニズムを備えた IME から、切り替えメカニズムのない IME に循環することはできません。この動作変更は、switchToNextInputMethod() メソッドで実装されます。

更新された IME 切り替え API の使用方法の例については、このリリースの更新版のソフト キーボード実装サンプルをご覧ください。IME の切り替えを実装する方法について詳しくは、インプット メソッドの作成をご覧ください。

マニフェストの宣言

宣言可能な必須機能

<uses-feature> 要素で以下の値がサポートされるようになりました。これにより、アプリに必要な機能を備えたデバイスにのみアプリをインストールできます。

ユーザー権限

アプリが特定の API にアクセスするために必要な権限を宣言するために、以下の権限が <uses-permission> 要素でサポートされるようになりました。

  • BIND_DREAM_SERVICE: API レベル 21 以降をターゲットとする場合、システムのみがバインドできるようにするため、Daydream サービスにこの権限が必要になります。