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 デバイスから画像やファイルを選択できるようになりました。
また、このリリースでは、WebAudio、WebGL、WebRTC のオープン標準がサポートされるようになりました。 このリリースに含まれる新機能の詳細については、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 の使用方法については、このリリースの Camera2Basic
と Camera2Video
の実装サンプルをご覧ください。
オーディオの再生
このリリースには、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_FLAGS
に FLAG_SUPPORTS_IS_CHILD
を含めます。
また、Android 5.0 では、共有ストレージ上に新しいパッケージ固有のディレクトリが導入され、アプリで MediaStore
に含めるメディア ファイルを配置できます。新しい getExternalMediaDirs()
は、すべての共有ストレージ デバイス上のこれらのディレクトリへのパスを返します。getExternalFilesDir()
と同様に、返されたパスにアクセスするためにアプリに追加の権限は必要ありません。プラットフォームは、これらのディレクトリ内の新しいメディアを定期的にスキャンしますが、MediaScannerConnection
を使用して新しいコンテンツを明示的にスキャンすることもできます。
ワイヤレスと接続
複数のネットワーク接続
Android 5.0 では、新しいマルチネットワーキング API が提供されています。これにより、特定の機能を備えた利用可能なネットワークを動的にスキャンして、それらのネットワークへの接続を確立できます。この機能は、アプリで SUPL、MMS、携帯通信会社の請求ネットワークなどの特殊なネットワークが必要な場合や、特定の種類の転送プロトコルを使用してデータを送信する場合に便利です。
アプリからネットワークを動的に選択して接続するには、次の手順を行います。
ConnectivityManager
を作成します。NetworkRequest.Builder
クラスを使用してNetworkRequest
オブジェクトを作成し、アプリに必要なネットワーク機能とトランスポート タイプを指定します。- 適切なネットワークをスキャンするには、
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()
を呼び出して、フィルタのリストを渡します。メソッド呼び出しでは、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 には、企業環境内でアプリを実行するための新機能が用意されています。ユーザーが既存の個人アカウントを持っている場合、デバイス管理は管理対象プロビジョニング プロセスを開始して、デバイスに共同プレゼンテーションするが独立した管理対象プロファイルを追加できます。管理対象プロファイルに関連付けられているアプリは、ユーザーのランチャー、履歴画面、通知で、管理対象外のアプリとともに表示されます。
マネージド プロビジョニング プロセスを開始するには、Intent
で ACTION_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
を実行する場合と同様で、dumpsys
、am
、content
、pm
などのシェルベースのツールを使用できます。 - ユーザー補助 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>
要素で以下の値がサポートされるようになりました。これにより、アプリに必要な機能を提供するデバイスにのみアプリをインストールできます。
FEATURE_AUDIO_OUTPUT
FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
FEATURE_CAMERA_CAPABILITY_RAW
FEATURE_CAMERA_LEVEL_FULL
FEATURE_GAMEPAD
FEATURE_LIVE_TV
FEATURE_MANAGED_USERS
FEATURE_LEANBACK
FEATURE_OPENGLES_EXTENSION_PACK
FEATURE_SECURELY_REMOVES_USERS
FEATURE_SENSOR_AMBIENT_TEMPERATURE
FEATURE_SENSOR_HEART_RATE_ECG
FEATURE_SENSOR_RELATIVE_HUMIDITY
FEATURE_VERIFIED_BOOT
FEATURE_WEBVIEW
ユーザー権限
アプリが特定の API にアクセスするために必要な権限を宣言するために、<uses-permission>
要素で以下の権限がサポートされるようになりました。
BIND_DREAM_SERVICE
: API レベル 21 以降をターゲットとする場合、システムだけがバインドできるようにするため、Daydream サービスにこの権限が必要になります。