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 システム イメージにアプリをインストールした後、この変更を加えたアップデート済みのアプリを公開します。

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

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

重要な動作の変更点

過去に Android にアプリを公開したことがある場合は、アプリが Android 5.0 の変更点による影響を受ける場合があります。

詳細については、Android 5.0 の変更点をご覧ください。

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

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

Android 5.0 では、Android の新しいマテリアル デザイン スタイルのサポートが追加されました。マテリアル デザインを使うと、外観が動的に変化し、ユーザーから見て UI 要素が自然に切り替わるアプリを作成できます。このサポートには以下が含まれます。

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

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

最近使ったアプリ画面の同時実行中のドキュメントとアクティビティ

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

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

最近使ったアプリ画面が整理されるように、最近使ったアプリ画面に表示できるタスクの最大数をアプリから設定できます。そのためには、<application> 属性 android:maxRecents を設定します。現在指定できる最大タスク数は、ユーザーあたり 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 のロック画面には、通知を表示する機能があります。ユーザーは [Settings] から、機密性のある通知内容をセキュリティで保護されたロック画面に表示できるようにするかどうかを選択できます。

アプリでは、セキュリティで保護されたロック画面にアプリの通知が表示されるときの詳細表示レベルを制御できます。可視性レベルを制御するには、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>

メディア

高度なカメラ機能のための 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 に知らせ、アルバムアートの抽出と表示ができるようにしてください。UI とサービスにまたがるメディアの再生の制御が、新しい MediaSession クラスと MediaController クラスを使用して、より簡単に行えるようになりました。

新しい MediaSession クラスは廃止された RemoteControlClient クラスの代わりとなるものであり、トランスポート コントロールとメディア ボタンを処理するための単一のコールバック メソッド セットを提供します。アプリでメディアの再生機能を提供して Android TV または Wear プラットフォームで実行する場合は、MediaSession クラスを使用し、同じコールバック メソッドを通じてトランスポート コントロールを処理してください。

新しい MediaController クラスを使用して独自のメディア コントローラ アプリを作成できるようになりました。このクラスは、アプリの UI プロセスからメディアの再生を監視して制御するためのスレッドセーフな方法を提供します。コントローラの作成時に MediaSession.Token オブジェクトを指定し、指定した MediaSession をアプリから操作できるようにします。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 は、選択されたサブツリーへのアクセスを意味します。その後、buildDocumentUriUsingTree()buildChildDocumentsUriUsingTree()query() と一緒に使用してサブツリーを探索できます。

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

DocumentsProvider を実装しようとしていて、サブツリーの選択をサポートしたい場合は、isChildDocument() を実装し、FLAG_SUPPORTS_IS_CHILDCOLUMN_FLAGS に追加します。

また、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 Energy(Bluetooth 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() を呼び出して、フィルタのリストを渡します。このメソッド呼び出しでは、ScanCallback の実装を渡して、Bluetooth LE のアドバタイズメントが見つかったときにそれが報告されるようにする必要もあります。

NFC の機能強化

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

  • Android ビームが [share] メニューで使用できるようになりました。
  • ユーザーの端末でアプリから 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 クラスを使用します。次のような特定の条件のときに実行されるようにタスクをスケジュールできます。

  • 端末の充電時に開始する
  • 端末が従量制ではないネットワークに接続されたときに開始する
  • 端末がアイドル状態のときに開始する
  • 特定の期限までに完了する、または最小限の遅延で完了する

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

JobInfo uploadTask = new JobInfo.Builder(mJobId,
                                         mServiceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NetworkType.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 つの方法があります。

  • 手動による方法:ユーザーは [Settings] > [Security] > [Screen Pinning] で画面固定を有効にして、最近使ったアプリ画面の緑色のピン アイコンをタップすることによって、固定するタスクを選択できます。
  • プログラミングによる方法:プログラムから画面固定を有効にするには、アプリで startLockTask() を呼び出します。リクエストしているアプリがデバイス オーナーではない場合は、確認のメッセージがユーザーに表示されます。デバイス オーナー アプリから setLockTaskPackages() メソッドを呼び出すと、ユーザーの確認ステップなしでアプリの固定を有効にできます。

タスク固定をアクティブにすると、次のような動作になります。

  • ステータス バーが空になり、ユーザーの通知やステータス情報が表示されません。
  • [Home] ボタンと [Recent Apps] ボタンが表示されません。
  • 他のアプリから新しいアクティビティを起動できません。
  • 新しいタスクが作成されない限り、現在のアプリから新しいアクティビティを起動できます。
  • 画面固定がデバイス オーナーによって開始された場合は、アプリが stopLockTask() を呼び出すまで、ユーザーはアプリにロックされたままになります。
  • 画面固定がデバイス オーナーでない別のアプリによるアクティビティ、またはユーザーによる直接のアクティビティである場合、ユーザーは [Back] ボタンと [Recent] ボタンを同時に押すことによって画面固定を解除できます。

印刷フレームワーク

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

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

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

システム

アプリの使用統計情報

新しい android.app.usage API を使用して Android 端末のアプリ使用状況履歴にアクセスできるようになりました。この API では、廃止された getRecentTasks() メソッドよりも詳細な使用状況情報が提供されます。この API を使用するには、最初にマニフェストで "android.permission.PACKAGE_USAGE_STATS" パーミッションを宣言する必要があります。また、ユーザーは [Settings] > [Security] > [Apps] からこのアプリの使用状況へのアクセス権を有効にする必要があります。

使用状況データはアプリ単位で収集され、日次、週次、月次、年次の各期間でデータが集計されます。このデータの最長保持期間は次のとおりです。

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

各アプリについて次のデータが記録されます。

  • アプリが最後に使用された時間
  • 対象期間(1 日、1 週間、1 か月、または 1 年)にアプリがフォアグラウンドに存在した合計時間
  • 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 クラスを使用すると、特定のロケール、品質、遅延レーティングに関連付けられた音声プロファイルや、テキスト読み上げ(TTS)エンジン固有のパラメータをアプリで使用できます。

IME

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

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

また、次の IME に切り替えメカニズムが組み込まれているかどうか(およびその IME が次に続く IME への切り替えをサポートしているかどうか)をフレームワークがチェックするようになりました。切り替えメカニズムのある IME から切り替えメカニズムのない IME への循環切り替えは行われません。この動作変更は switchToNextInputMethod() メソッドによって実装されています。

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

マニフェストの宣言

宣言可能な必須機能

次の値が <uses-feature> 要素でサポートされるようになり、アプリで必要な機能を有する端末にのみアプリがインストールされるようにできます。

ユーザー パーミッション

次のパーミッションが<uses-permission> 要素でサポートされ、アプリで特定の API にアクセスするために必要なパーミッションを宣言できるようになりました。

  • BIND_DREAM_SERVICE:API レベル 21 以上を対象とする場合は、システムのみがバインドできるようにするため、スクリーンセーバー サービスでこのパーミッションが必要になります。