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 では、Chromium M37 の WebView 実装が更新され、セキュリティと安定性が強化され、バグが修正されました。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 では、OpenGL ES 3.1 の Java インターフェースとネイティブ サポートが追加されています。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 では、内部パイプラインの一部はまだ浮動小数点数ではありません)。
  • アプリは、MediaCodec と同じ形式の ByteBuffer として音声データを提供できるようになりました。
  • 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 ビームを使用できるようになりました。
  • アプリは、ユーザーのデバイスで Android ビームを呼び出し、invokeBeam() を呼び出すことでデータを共有できます。これにより、ユーザーは、別の 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 サービスにこの権限が必要になります。