Android 5.0 API概要

2014/10/25 24863hit

Android5.0のAPIについて正式な情報がアップされたため翻訳してみました
流石にメジャーバージョンアップだけあってAPIの変更は多岐に渡ります。
以前のL Developer Preview API 概要から更新された部分も多々あります。

原文

API level21

Android5.0(LOLLIPOP)はユーザーとアプリ開発者のために新機能を提供します。このドキュメントでは特に注目すべき新しいAPI群の紹介を行います。

開発を始める

Android5.0向けアプリの構築を始めるために最初にAndroid SDKを取得し次にSDK Managerを使ってAndroid 5.0 SDKプラットフォームとシステムイメージをダウンロードします。

あなたのアプリを実際のデバイスでテストするためにNexus5あるいはNexus7に書き込むにはANDROID PREVIEW SYSTEM IMAGEを見てください

target API levelをアップデートする

Android5.0向けに動くデバイスに最適化するためにtargetSdkVersionを21にセットします。Android5.0システムイメージにあなたのアプリをインストールしテストを行ってからアップデートされたアプリを公開します。

minSdkVersionでサポートされていないAPI群を実行する前にシステムAPI levelをチェックすることで古いバージョンをサポートし続けたままAndroid5.0APIを使用することが出来ます。下位互換性を維持する方法について学ぶにはSupporting Different Platform Versionsを読んでください。

API levelがどのように働くかについては、What is API Level?を読んでください。

重要な振る舞いの変更

あなたが既にAndroidアプリを公開している場合Android5.0の変更で影響を受ける可能性があるので注意してください。

もし、アプリを新しいAndroid Runtime(ART)でテストしていないなら

4.4のリリースでは新しく実験的にAndroid runtime ARTが導入されました。4.4においてARTはオプションで、標準のランタイムはDalvikのままでした。Android5.0ではARTが標準のランタイムとなりました。

ARTの新機能についてはIntroducing ARTを見てください。主要な新機能は以下のとおりです。
・事前コンパイル(AOT)
・ガベージコレクション(GC)の改善
・デバッグサポートの改善
多くのAndroidアプリは一切変更すること無くARTで動作します。しかし、いいくつかのDalvik向けのテクニックはARTでは動かなくなることがあります。重要な問題についてはVerifying App Behavior on the Android Runtime (ART)を読んでください。特に以下の場合注意が必要です。
・C/C++のコードを動かすためにJavaNativeInterface(JNI)を使用している
・スタンダードじゃないコードを生成する開発者向けツールを使用している(たとえばいくつかの難読化ツールなど)
・コンパクティングガベージコレクションと相容れないテクニックを使用している場合(ARTではまだコンパティングガベージコレクションは実装されていませんが、Android Open Source Projectによって開発中です。)

もし、Notificationを実装しているなら

Android5.0におけるNotificationの変更を確認して下さい。
Android5.0以上向けにNotificationを設計する方法はnotifications design guide.を読んでください。

マテリアルデザインスタイル

新しいマテリアルデザインウィジェットに合致するようにNotificationは白(あるいはとても明るい色)に暗い文字で描画されるようになります。あなたのNotificationが新しいカラースキームで正しく表示されることを確認して下さい。もしあなたのNotificationの見た目に問題が有るなら以下のように修正します。
setColor()を使ってアイコン画像の後ろに円形のアクセントカラーを設定する
・色付けされたassetsを更新あるいは削除する。システムは不透明のアクションアイコンとメインNotificationアイコンを全て無視します。アイコンは透明度のみを設定するようにしてください。システムはNotificationアイコンを白、アクションアイコンを濃いグレイで描画します。

音とバイブレーション

もしRingtoneMediaPlayerVibratorクラスを使ってNotificationに音やバイブレーションを設定しているなら、このコードを削除してください。それによりシステムはpriority modeによって正しくNotificationを表現できます。代わりにNotification.Builderメソッドを使って音とバイブレーションを追加してください。RINGER_MODE_SILENTをデバイスに設定することで新しいpriority modeに入ります。RINGER_MODE_NORMALRINGER_MODE_VIBRATEをセットするとpriority modeから外れます。

従来のAndroidではタブレットデバイスではSTREAM_MUSICを使ってマスターストリームのボリュームをコントロールしていました。Android5.0ではmaster volume streamは電話機とタブレットデバイスで統一され、STREAM_RING
STREAM_NOTIFICATIONによりコントロールされます。

ロックスクリーンでの見た目

Andorid5.0では標準のNotificationがユーザーのロックスクリーンに表示されるようになりました。ユーザーは機密情報を表示しないように保護をかけることが出来ます。その場合システムはNotificationが表示するテキストを自動的に編集します。この編集された通知をカスタマイズするにはsetPublicVersion()を使用します。

もし、Notificationに個人情報が含まれていなかったり、メディア再生コントロールをNotification上で可能にしたいなら、setVisibility()メソッドを呼びNotificationのvisibility levelにVISIBILITY_PUBLICをセットしてください。

音声再生

もし、メディア再生ステータスやトランスポートコントロールを実装しているなら独自のRemoteViews.RemoteViewオブジェクトに代わって新しいNotification.MediaStyleを使うことを検討してください。どちらの場合でもnotificationのvisibilityにはVISIBILITY_PUBLICをセットしロックスクリーンからアクセスできるようにします。Android5.0ではシステムがRemoteControlClientオブジェクトをロックスクリーン上に表示しなくなったことに注意してください。より詳細は後述の「もしRemoteControlClientを使っていたら」を見てください。

Heads-up notification

デバイスがアクティブなとき(デバイスがアンロックされスクリーンがオンの時)Notificationは小さなフローティングウィンドウとして表示されることがあります(heads-up notificationと言います)これらのNotificationはNotificationのcompact formに似ていますが、Heads-up notificationにはアクションボタンも表示されます。ユーザーはheads-up notificationに対してアクションや無視を現在のアプリを終了せずに行うことが出来ます。

例えば以下の状態の時heads-up notificationが表示されることがあります。
・ユーザーがフルスクリーンActivityの中にいる(アプリがfullScreenIntentを使っている)
・Notificationの優先度が高く着信音あるいはバイブレーションを使っている。
あなたのアプリが上記の状況で通知を実行する場合はheads-up notificationが正しく表示されることを確認して下さい。

図1.フルスクリーンActivityに表示されたHeads-up notification

もしRemoteControlClientを使っていたら

RemoteControlClientは非推奨になりました。可能な限り早く新しいMediaSessionに切り替えてください。

Android5.0のロックスクリーンにはMediaSessionRemoteControlClientは表示されません。代わりにNotificationを通じてロックスクリーンに表示されるmedia playback controlを提供できます。これにより多機能なメディアボタンを提供でき、ロックスクリーンとアンロックデバイス間で一貫性の有るエクスペリエンスを提供できます。

Android5.0ではこのために新しいNotification.MediaStyleテンプレートを導入しました。Notification.MediaStyleはNotification.Builder.Action()で組み込んでいたアクションの代わりに、media playback notificationに組み込まれたボタンを使います。このNotificationがメディアセッションをコントロールすることをシステムに通知するためにsetSession()メソッドにセッショントークンを渡してください。

NotificationのVisibilityにVISIBILITY_PUBLICが渡されていることを確認します。 これにより、Notificationはどんなロックスクリーン(認証があるかどうかにかかわらず)に表示しても安全であるとマークされます。詳細は後述のロックスクリーンNotificationを見てください。

アプリがAndroid TVWearプラットフォーム上で実行されMediaSessionクラスを実装していれば、Media playback controlが表示されます。もし、アプリがAndroidデバイスのメディアボタンイベントを受信する必要があるならMediaSessionも実装する必要があります。

もしアプリがgetRecentTasks()を使っていたら

Android5.0の新しいconcurrent documentsとactivities tasksの機能により(後述の最近使った画面におけるconcurrent documentsとactivities tasksを見てください)、プライバシーを改善するためにActivityManager.getRecentTasks()は非推奨となりました。後方互換性のために、このメソッドはとても小さなデータのサブセットを返します。それには呼び出したアプリ自身のタスクと、いくつかの機密でないタスク(Home等)が返ってきます。もしこのメソッドで自分自身のタスクを探すために使用しているならそれらの情報を得るために代わりにgetAppTasks()を使います。

もしAndroid Native Development Kit(NDK)を使用していたら

Android5.0は64bitシステムのサポートを導入しています。64bitは拡張されたアドレス空間と改善されたパフォーマンスを含み、既存の32bitアプリも完全にサポートしています。64bitサポートはOpenSSLの暗号化パフォーマンスも改善します。このリリースには新しいnative media NDK APIやnative OpenGL ES(GLES)3.1のサポート追加されています。

Android5.0で提供された64bitサポートを使用するためにNDK Revision 10cをAndroid NDK pageからダウンロードしてインストールしてください。
Revision10cのrelease notesを参照するとNDKの重要な変更点とバグフィクスのより詳細を見ることが出来ます。

もしあなたのアプリがサービスをバインドしていたら

Context.bindService()メソッドは明示的Intentが必要になりました。暗黙のIntentを渡した場合例外がスローされます。これによりアプリがよりセキュアになり、Serviceの開始とバインディングに明示的Intentを使うことでserviceにintent filterを定義しなくなりました。

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

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

Androidの新しいmaterial design styleのサポートが追加されます。マテリアルデザインを使って動的に見た目をかえ、UI要素の移り変わりが行えるユーザーが自然に感じるアプリを作ることが出来ます。このサポートには以下が含まれています。
・マテリアルテーマ
・影の表示
RecyclerView widget
・アニメーションdrawableとスタイリングエフェクト
・マテリアルデザインアニメーションとActivityの切り替えエフェクト
・Viewの状態に応じたViewプロパティのためのAnimator
・コントロール可能なカラーパレットによるカスタマイズ可能なUIwidgetとアプリバー
・XMLベクターグラフィックによるアニメーションあり・なしのdrawable
マテリアルデザインの機能をアプリに追加する方法について更に学ぶにはMaterial Designを見てください。

最近使った画面内のConcrrent documentsとactivities

従来のrecents screenではそれぞれのアプリごとにユーザーが最近関連したひとつの画面しか表示することが出来ませんでした。
Android5.0は必要であればアプリがドキュメントに対応する複数のタスクを開くことが出来るようになりました。
この機能により最近使った画面で、全アプリが一貫した方法で切り替えを行え、個々のActivityとドキュメント間を素早く切り替えることが出来るようになるため、マルチタスクが簡単になります。例えば、ウェブブラウザアプリで開いているタブや、オフィスアプリでのドキュメント、ゲームでのマッチング、メッセージングアプリのチャットなどがconcurrent taskの例です。
あなたのアプリはActivityManager.AppTaskを通じてそのタスクを管理できます。

論理的ブレークを入れてシステムにActivityが新しいタスクだと認識させるにはstartActivity()でActivityを実行するときにFLAG_ACTIVITY_NEW_DOCUMENTを使用します。manifest内の要素にdocumentLaunchModeへ"intoExisting" や "always"を設定することでこの振る舞いを行うことも出来ます。

最近使った画面が混乱しないように、アプリが画面に表示するタスクの最大数を設定することが出来ます。applicationのattributeにandroid:maxRecentsを設定してください。現在指定できる最大数はユーザーごとに50です。(メモリーの少ない端末では25です)

最近使った画面内のタスクは再起動後も継続させることが出来ます。継続的な振る舞いを制御するためにandroid:persistableMode属性を使用します。setTaskDescription()メソッドを呼ぶことで最近使ったアプリ内で、Activityの色やラベル、アイコンなど視覚的な情報を変更することも出来ます。

WebViewアップデート

Android5.0はChromium M37を実装したWebViewに更新されます。セキュリティと安定性が向上しバグ修正も行われています。Android5.0で動くWebViewのuser-agent文字列は標準でバージョン番号として37.0.0.0を含みます。

このリリースではPermissionRequestクラスを導入します。これにより、getUserMedia()などのwebAPIでカメラやマイクのような保護されたリソースにアクセスする許可を与える事ができるようになります。アプリはWebViewに許可を与えるために、これらリソースを使う適切なAndroid permissionが必要です。

新しいonShowFileChooser()メソッドにより、WebView内の入力フォームフィールドを使い、Androidデバイス内の画像やファイルをさせることが出来るようになります。

加えて、オープンスタンダードのWebAudioWebGLWebRTCもサポートされるようになります。これらの新機能についてはWebView for Androidを読んでください。

画面キャプチャーと共有

Android5.0ではandroid.media.projectionAPI群によりアプリにスクリーンキャプチャーとスクリーン共有機能を追加できます。この機能はビデオ会議アプリで画面共有を有効にしたいときなどに便利です。

新しいcreateVirtualDisplay()メソッドにより、メイン画面(デフォルトディスプレイ)のコンテンツをキャプチャーしSurfaceオブジェクトにつめてネットワーク越しで送信できます。このAPIは保護されていないスクリーンコンテンツのみで使用可能で、システムオーディオを含みません。画面キャプチャーを開始するために、createScreenCaptureIntent()メソッドより取得したIntentを使いスクリーンキャプチャーダイアログを表示してユーザーの許可を得る必要があります。

新しいAPIをどのように使用するかの例についてはApiDemosサンプルプロジェクト内のMediaProjectionDemoクラスを見てください。

Notification

ロックスクリーンNotification

Android5.0のロックスクリーンはNotificationを表示できます。ユーザーは設定で機密なNotificationの内容をセキュリティー解除前のロックスクリーンに表示するかどうかを選ぶことが出来ます。

アプリはセキュリティー解除前のロックスクリーンに表示されるNotificationの表示レベルを制御できます。表示レベルを制御するためにsetVisibility()メソッドを呼び以下の値から1つを選んでください。
VISIBILITY_PRIVATENotificationのアイコンなど基本的な情報は表示しますがNotificationの全体は表示しません。
VISIBILITY_PUBLIC:Notificationの全体を表示します。
VISIBILITY_SECRETNotificationのアイコンを含め何も表示しません。
表示レベルにVISIBILITY_PRIVATEを指定すると、ユーザーに関する詳細を隠すように編集されたバージョンのNotificationコンテンツを提供することも出来ます。例えばSMSアプリでは「3件の新着メッセージが有ります」とだけ表示し、内容と送信者を隠す事ができます。この代替Notificationを提供するために最初にNotification.Builderを使ってNotificationを作るように修正してください。そして、プライベートなNotificationオブジェクトのsetPublicVersion()メソッドを使って代替Notificationをアタッチしてください。

Notificationメタデータ

Notificationをより賢く並び替えるために、Android5.0ではアプリと関連したメタデータを使用します。メタデータをセットするためにNotifiationを作るときNotification.Builder内の以下のメソッドを呼んでください。
setCategory()デバイスがpriority mode(例えばNotificationが電話やインスタントメッセージの着信だったりアラームだったりした場合)システムがどのようにあなたのNotificationを取り扱うかを指定します。
setPriority()Notificationが通常より重要だったりそうでなかったりを指定します。priorityフィールドにPRIORITY_MAXPRIORITY_HIGHが設定されており、着信音かバイブレーションを伴うNotificationでは小さなフローティングウィンドウナで表示されます。
addPerson()Notificationに関連した人を一人以上設定することが出来ます。これによりシステムが特定の人々が関連するNotificationをまとめてグループ化することが出来ます。また、より重要な人に関するNotificationをランク付けできます。

グラフィック

OpenGL ES 3.1サポート

Android5.0ではOpenGL ES 3.1のためのJava Interfaceとネイティブのサポートを追加しました。OpenGL ES3.1により提供される主要な機能は以下のとおりです。
・Compute shaders
・Separate shader objects
・Indirect draw commands
・Multisample and stencil textures
・Shading language improvements
・Extensions for advanced blend modes and debugging
・OpenGL ES 2.0 and 3.0の後方互換性
OpenGL ES 3.1のJava interfaceはGLES31にて提供されます。OpenGL ES 3.1を使用するときはmanifestファイルのuses-featureタグにandroid:glEsVersionを指定します。


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

デバイスがOpenGL ESのどのバージョンでの実行をサポートしているか調べる方法を含めたOpenGL ESをつかうためのより詳細はOpenGL ES API guideを見てください。

Android Extension Pack

OpenGL ES3.1に加えてこのリリースではさらなるグラフィック機能のためのJava intaerfaceとネイティブ向けに拡張パックが提供されます。これらのエクステンションはAndroidによって1つのパッケージとして取り扱われます。(もしANDROID_extension_pack_es31aのエクステンションが使用可能であれば、パッケージ内の全機能が使用可能であり、1つの#extensionステートメントで全てのshading languageの機能が有効になります)

拡張パックがサポートするもの
・Guaranteed fragment shader support for shader storage buffers, images, and atomics (Fragment shaderのサポートはOpenGL ES3.1内ではオプションです)
・Tessellationとgeometry shaders
・ASTC (LDR) texture compression format
・Per-sample interpolationとshading
・Different blend modes for each color attachment in a frame buffer
拡張パックのJavaインターフェイスはGLES31Extで提供されます。拡張パックがサポートされている端末のみでアプリがインストールされるように定義するにはmanifestに以下のように宣言します。

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

メディア

先進のカメラ機能のためのCamera API

美しい写真をキャプチャーしたり画像処理を簡単に行うためにAndroid5.0では新しいandroid.hardware.camera2APIが導入されます。getCameraIdList()によりシステムが利用できるカメラデバイスにプログラム的にアクセスし、openCamera()で特定のデバイスに接続します。画像のキャプチャーを開始するためにCameraCaptureSessionを作り、画像をおくるSurfaceを指定します。CameraCaptureSessionは1枚の写真を取るか複数の連続写真を取るかを指定できます。

CameraCaptureSession.CaptureCallbackを実装したリスナーを、capture requestにセットすると、新しい画像がキャプチャーされた時に通知が行われます。システムがcaputrure requestを完全に置けた時、CameraCaptureSession.CaptureCallbackリスナーのonCaptureCompleted()が呼ばれます。CaptureResult内に画像キャプチャーのメタデータが提供されます。

CameraCharacteristicsクラスによりデバイスでどの機能が使用可能であるかを検出できます。このオブジェクトのINFO_SUPPORTED_HARDWARE_LEVELプロパティーがカメラの機能レベルを表します。

・全てのデバイスは最低でもINFO_SUPPORTED_HARDWARE_LEVEL_LEGACYをサポートします。この機能は非推奨となったCameraAPIとほぼ同じです。
INFO_SUPPORTED_HARDWARE_LEVEL_FULLハードウェアレベルをサポートするデバイスは写真と後処理、高フレームレート時の高解像度キャプチャーに対する手動制御機能を有します。

新しいCameraAPIの使い方はこのリリースのサンプルに実装されているCamera2BasicとCamera2Videoを参照してください。

オーディオ再生

Android5.0ではAudioTrackに以下の変更が含まれています。
・浮動小数点フォーマット(ENCODING_PCM_FLOAT)によるオーディオデータを提供できます。これは、より大きなダイナミックレンジ、より一貫した精度と、より高いヘッドルームを可能にします。浮動小数点は特に中間処理において役立ちます。再生での最後にはより低いbit数のIntegerフォーマットを使用します。(Android5.0内のパイプラインはまだ浮動小数点になっていません)
・オーディオデータをMediaCodecにより提供されるのと同じ書式のByteBufferとして提供できます。
WRITE_NON_BLOCKINGオプションによりバッファリングと、マルチスレッドを簡単にします。

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

新しいNotificationとmedia APIを使って、システムUIがメディア再生について知り、アルバムアートを取得して表示できるようにしてください。
新しいMediaSessionMediaControllerクラスによりUIとサービス間でメディア再生をコントロールすることが簡単になります。

新しいMediaSessionクラスは非推奨のRemoteControlClientを置き換え、転送とメディアボタンの制御のコールバックメソッドを1つにセットして提供します。もし、あなたのアプリでメディア再生機能を提供し、AndroidTVWearプラットフォームで動くなら転送制御を同じコールバックメソッドで取り扱えるようにMediaSessionを使用してください。

新しいMediaControllerクラスにより、独自のメディアコントローラーアプリを作ることが出来るようになりました。このクラスはあなたのUIプロセスで、スレッドセーフにメディア再生を監視して制御する方法を提供します。コントローラーを作るときに、MediaSession.Tokenを指定して、MediaSessionとアプリが対話できるようにします。MediaController.TransportControlsメソッドを使い、セッションのメディア再生をコントロールするplay()stop()skipToNext()setRating()などのコマンドを送信できます。コントローラーにより、MediaController.Callbackオブジェクトを登録し、セッションのメタデータや状態の変化を監視することも出来ます。

加えて、Notification.MediaStyleクラスによってメディアセッションに紐付いた再生制御が出来るリッチなNotificationを作ることが出来ます。

メディアブラウジング

Android5.0は新しいandroid.media.browse APIを通じて他のアプリのライブラリにあるメディアコンテンツをブラウズすることが出来る機能を導入しました。MediaBrowserServiceクラスを継承し、メディアコンテンツを公開できます。MediaSession.Tokenへのアクセスを提供するMediaBrowserServiceを実装することで、あなたのサービスを通じて提供されたメディアコンテンツを他のアプリが再生できます。

media browser serviceと対話するためにMediaBrowserクラスを使用します。MediaBrowserのインスタンスを生成するときに、MediaSessionのコンポーネンツ名を指定します。そのインスタンスを使って、関連したサービスに接続し、サービスを通じて公開されるコンテンツを再生するためのMediaSession.Tokenを入手できます。

ストレージ

ディレクトリ選択

Android5.0はStorage Access Frameworkを拡張して、ユーザーがディレクトリーのサブツリー全体を選択して含まれた全てのドキュメントに読み書き権限を与えることが出来るようになりました。それぞれのアイテムごとにユーザーが認証する必要はなくなりました。

ディレクトリサブツリーを選択したら、OPEN_DOCUMENT_TREE intentを作って送ります。システムはサブツリーの選択に対応する全DocumentsProviderのインスタンスを表示し、ユーザーにディレクトリを探して選択させます。選択されるとアプリへサブツリーへアクセスするためのURIが返されます。buildChildDocumentsUriUsingTree()buildDocumentUriUsingTree()query()を使ってサブツリーを探索できます。

新しいcreateDocument()メソッドにより新しいドキュメントやディレクトリをサブツリー配下のどこにでも作ることが出来ます。renameDocument()deleteDocument()で既に存在するドキュメントを管理します。これらを使う前にCOLUMN_FLAGSをチェックして、Providerがサポートしているかを確認します。

もし、DocumentsProviderを実装していてサブツリー選択をサポートしたいと思っているなら、isChildDocument()を実装して、COLUMN_FLAGSFLAG_SUPPORTS_IS_CHILDを含めます。

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

無線と接続性

複数ネットワーク接続

Android5.0は新しい複数ネットワーク接続APIを提供し、アプリが特定の機能を持ったネットワークを動的にスキャンして、接続することが出来るようになりました。この機能はあなたのアプリがSUPLやMMS、キャリアによるネットワークなどの特定のネットワークを必要とする場合や、特定のトランスポートプロトコルを使ってデータを送りたい時に役立ちます。

アプリが動的にネットワークを選んで接続するには以下の手順を踏みます。
1.ConnectivityManagerを作る。
2.NetworkRequestオブジェクトを作り、アプリが必要な転送タイプやネットワーク機能を指定するためにNetworkRequest.Builderを使う。
3. 適切なネットワークをスキャンするためにrequestNetwork()registerNetworkCallback()を呼びNetworkRequestConnectivityManager.NetworkCallbackの実装を渡します。ネットワークが見つかったらネットワークを切り替えたいときにはrequestNetwork()メソッドを使用します。切り替えを行わず通知のみを受け取りたいときは代わりにregisterNetworkCallback()メソッドを使用します。

システムが最適なネットワークを見つけた時、ネットワークと接続した時onAvailable()コールバックが呼び出されます。Networkオブジェクトを使ってコールバックからネットワークに関する追加情報を取得できます。あるいは直接選択されたネットワークを使って転送できます。

Bluetooth Low Energy

Android4.3ではBluetooth Low Energy(Bluetooth LE)のcentral roleのサポートがプラットフォームに導入されました。Android5.0ではAndroidデバイスはBluetooth LE peripheral deviceとして機能させることが出来ます。例えば、デバイスを万歩計や健康モニターとして機能させそのデータを他のBluetooth LEデバイスに送るアプリを作ることが出来ます。

新しいandroid.bluetooth.le APIは アプリでadvertisementsをbroadcastした応答をスキャンして、近くのBluetooth LEデバイスと接続することが出来ます。新しいadvertisingとスキャニングの機能を使用するにはmanifestのpermissionにBLUETOOTH_ADMINを加えてください。Google Play Storeはユーザーがアプリをアップデートしたりダウンロードするときに以下のアプリ権限をユーザーに問い合わせます。 "Bluetooth connection information: Allows the app to control Bluetooth, including broadcasting to or getting information about nearby Bluetooth devices."

Bluetooth LE advertisingを開始するため startAdvertising()を呼びAdvertiseCallbackクラスを実装したオブジェクトを渡して他のデバイスを探します。このコールバックオブジェクトはadvertising操作が成功か失敗した時に報告を受け取ります。

Android5.0はScanFilterクラスを導入し、アプリが興味がある特定のデバイスタイプのみをスキャンする事ができます。Bluetooth LEデバイスをスキャンするにはstartScan()を読んでフィルターのリストを渡します。このメソッドを呼ぶときにはBluetooth LE advertisementが見つかった時にレポートするためのScanCallbackを実装して渡す必要もあります。

NFCの改善

Android5.0は幅広くより柔軟にNFCを使うために以下の改良が加えられました。
・Android Beamは共有メニューから使用できるようになりました。
invokeBeam()を呼ぶことでデータを共有するのにアプリからAndroidBeamを呼び出せるようになりました。これにより、ユーザーが別のNFC端末にデータの転送を行うために、デバイスをタップしなくても良くなりました。
・新しいcreateTextRecord()メソッドを使ってUTF-8のテキストデータによるNDEFレコードを作ることが出来るようになりました。
・もし支払いアプリを開発しているなら、registerAidsForService()を呼ぶことで動的にNFC application ID(AID)を登録できるようになりました。setPreferredService()を呼ぶことでActivityが最前面の時にpreferredカードエミュレーションサービスをセットすることも出来ます。

Project Volta

Android5.0は新機能に加えてバッテリー寿命の改善も強化します。アプリの電力消費を理解して最適化するために、新しいAPIとツールを使ってください。

ジョブのスケジュール

Android5.0は新しいJobScheduler APIを提供します。これにより後から、あるいは特定の状況(デバイスが充電中など)に非同期でシステムがジョブを動かすように定義でき、バッテリー寿命を最適化出来ます。Job Schedulerは以下の様な場合に便利です。
・ユーザーが直面しておらずすぐに実行しなくてもいい作業を持っているアプリ。
・端末が充電中に行いたい作業があるアプリ。
・Wi-Fi接続に行う必要があるタスクが有るアプリ
・定期的なスケジュールにまとめて実行したいいくつかのタスクがあるアプリ。
作業単位はJobInfoオブジェクトに入れられます。このオブジェクトにはスケジュールの判定基準を指定します。

どのようなスケジュールでタスクを実行するか指定するためにJobInfo.Builderを使います。特定の状況に入った時にタスクを実行するようにスケジュール出来ます。例えば
・デバイスが充電中に開始する。
・従量制ではないネットワークに接続された時に開始する。
・デバイスがアイドル状態になった時に実行する。
・指定した最終期限の前、あるいは最小の遅延時間の後に実行する。
例:以下のコードを加えるとタスクを従量制じゃないネットワークに接続された時に実行できます。

JobInfo uploadTask = new JobInfo.Builder(mJobId,
mServiceComponent /* JobService コンポーネント*/)
.setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED)
.build();
JobScheduler jobScheduler =
(JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

もしデバイスの電力が安定した状況にあり(2分以上充電され続け、かつバッテリーがhealthy levelの状態に有るとき)システムは準備ができているスケジュールされたジョブを最終期限を待つこと無くすべて実行させます。

JobScheduler APIを使う方法の例を見るにはリリースに含まれているサンプルのJobSchedulerSmapleによる実装を参照してください。

バッテリー使用状況のための開発者ツール

新しい dumpsys batterystatsコマンドはunique user ID(UID)により最適化されたデバイスでバッテリーがどのように使われているかについての興味深い統計を生成します。この統計には如何含まれています。
・バッテリーに関連したイベントの履歴
・デバイス全体の統計
・UIDごととシステムごとのおおよその電力使用量
・アプリにおけるパケットごとのモバイル MS
・システムUIDの集計
・アプリUIDの統計
--helpオプションを使って出力方法のオプションについて調べることが出来ます。例えば最後に充電されてから、指定のアプリパッケージがどのようにバッテリーを使用したかを出力するには以下のコマンドを実行します。

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

Battery Historianツールを使ってdympsysコマンドの出力からログの電力に関して視覚的なHTMLを生成できます。この情報により簡単にバッテリーに関する問題を理解し、原因を特定できます。

職場と教育現場でのAndroid

プロビジョニングの管理

Android5.0は職場で実行するアプリのための新機能を提供します。ユーザーがすでに個人用のアカウントを持っているならば、デバイス管理者は会社用presentを追加し、デバイスで管理されているプロファイルと切り離された管理されたプロビジョニングプロセスを開始できます。
管理されたプロファイルに関連したアプリは管理されていないアプリと共にランチャーや最近使った画面、Notificationに表示されます。

管理されたプロビジョニングプロセスを開始するにはIntentACTION_PROVISION_MANAGED_PROFILEを送ります。呼び出しが成功したらシステムはonProfileProvisioningComplete()コールバックを呼び出します。setProfileEnabled()を呼び出して管理されたプロファイルを有効にできます。

標準では管理されたプロファイルで小さなアプリのサブセットが有効になるだけです。enableSystemApp()を呼ぶことで管理されたプロファイル用のアプリを追加でインストールすることが出来ます。

ランチャーアプリを作っているなら、新しいLauncherAppsクラスを使って現在のユーザーと関連した管理されたプロファイルが実行できるActivityのリストを取得できます。ランチャーは管理されたアプリを視認できるようにicon drawableに仕事バッジを表示できます。getUserBadgedIcon()を呼びバッジアコンを取得できます。

この新機能をどのように使うかはリリースに実装されたサンプルのBasicManagedProfileを参照してください。

デバイスオーナー

Android5.0はデバイスオーナーアプリをデプロイする機能を導入しました。デバイスオーナーは特殊なタイプのdevice administratorで、第二ユーザーを追加したり削除したり、デバイスのグローバル設定を行ったり出来ます。デバイスオーナーアプリはDevicePolicyManagerクラスのメソッドを使って設定やセキュリティ、管理されたデバイスのアプリについてきめ細かい制御が可能です。デバイスオーナーは一つのデバイスに同時に一人まで設定できます。

デバイスオーナーを配信しアクティベートするために、デバイスがプロビジョニング状態ではない時にNFCデータをプログラミングアプリからデバイスに転送しなくてはいけません。このデータ転送は管理されたプロビジョニングするさいに記載しているプロビジョニングIntentと同じ情報を送ります。

スクリーンのピン止め

Android5.0では新しくscreen pinning APIを導入します。これはユーザーを一時的に現在のタスクからでたりNotificationで遮られるのを制限できます。これにより、丁寧なサポートが必要な教育アプリ(訳注:幼児向けアプリなど)や単一目的のキオスクアプリなどでこれを使用することが出来ます。一度スクリーンがピン止めされると、アプリがモードを解除するまでユーザーはNotificationを見たり他のアプリに移ったりホームスクリーンに戻ることができなくなります。

2つの方法でアクティブなスクリーンをピン止め出来ます。
・手動:設定>セキュリティ>Screen Pinningで最近使った画面から緑のピンアイコンでタスクを選びます。
・プログラミング:startLockTask()をアプリ内から呼ぶことでプログラム的にスクリーンのピン止めを有効にできます。もしこのアプリがデバイスオーナーでない場合、ユーザーに確認を求めます。デバイス所有者アプリの場合はユーザーの確認ステップがなくアプリをピン止め出来るsetLockTaskPackages()メソッドが使えます。
タスクのロックが有効になると以下のことが起きます。
・ステータスバーは空白になりNotificationとステータス情報は非表示になります。
・ホームと最近使ったアプリボタンは非表示になります。
・他のアプリはActivityを起動できなくなります。
・新しいタスクを作らない限り現在のアプリは新しいActivityを開始できます。
・もしスクリーンのピン止めがデバイスオーナーによって行われている場合、アプリがstopLockTask()を呼び出すまでユーザーはアプリにロックされたままとなります。
・ユーザーが直接デバイスオーナー以外のアプリでスクリーンのピン止めを行った場合、戻ると最近使ったボタンを長押しすることで解除できます。

印刷フレームワーク

ビットマップとして描画されるPDF

新しいPdfRendererクラスを使うことで印刷用にPDFページをbitmap画像の中に含めることが出来ます。あなたはシステムが印刷可能なコンテンツを書き出すためにシーク可能なParcelFileDescriptorを指定する必要があります。(つまりコンテンツにランダムアクセスが可能)。
openPage()を使ってレンダリングするためのページを取得できます。次にrender()を呼び出して開かれたPdfRenderer.Pageをbitmapに変えます。もしドキュメントの一部をbitmapに移したいと思う場合は追加のパラメータをセットすることも出来ます。(例えばドキュメントをズームした時のためのtiled renderingを実装する場合など)

新しいAPIを使う方法の例を見るにはサンプルのPdfRendererBasicを参照してください。

システム

アプリ使用統計

新しいandroid.app.usage APIによりAndroidデバイス上のアプリ使用履歴にアクセスできます。このAPIは非推奨となったgetRecentTasks()よりも詳細な使用の情報を提供します。このAPIを使用するには最初にmanifestのpermissionに"android.permission.PACKAGE_USAGE_STATS"を宣言する必要があります。ユーザーは設定>セキュリティ>Apps with usage accessによりアクセスを有効にしてやる必要もあります。

システムはアプリごとに基本的な使用状況のデータを集めます。そして日毎、週毎、月毎、年毎の間隔でデータを集計します。
システムがこのデータを記憶しておく最大期間は以下のとおりです。
・日データ:7日間
・週データ:4週間
・月データ:6ヶ月
・年データ:2年
各アプリに付きシステムは下記のデータを集めます。
・最後にアプリが使われた時
・一定間隔(日毎、週毎、月毎、年毎)ごとのアプリが最前面で使われたトータル時間
・コンポーネント(パッケージ名とactivityの名前で識別される)が1日の間に、前面、あるいは背面に移動した時の時間
・デバイスの設定が変更された時間(デバイスが回転した時など)

テストとアクセシビリティ

改善されたテストとアクセシビリティ

テストとアクセシビリティのためにAndroid5.0は以下がサポートされます。
・新しいgetWindowAnimationFrameStats()getWindowContentFrameStats()メソッドでWindowアニメーションとコンテンツのフレームの統計を集めます。これらのメソッドによりアプリが円滑なユーザーエクスペリエンスを提供するのに充分なフレッシュレートでフレームを生成しているかどうかを計測するテストを書くことが出来ます。
・新しいexecuteShellCommand()メソッドにより計測テストからシェルコマンドを実行できます。このコマンドは開発用PCから接続された携帯に送られるadb shellの用に動きます。dumpsys, am, content, pmのようなシェルベースのツールが使用できます。
・アクセシビリティサービスとテストツールは(UiAutomatorなどの)アクセシビリティAPI群を使用します。これにより、ユーザーと対話性が有るウィンドウのプロパティに対する詳細を取得できるようになります。AccessibilityWindowInfoオブジェクトのリストを取得するには新しいgetWindows()メソッドを呼びます。
・新しいAccessibilityNodeInfo.AccessibilityActionクラスはAccessibilityNodeInfoで標準、あるいはカスタマイズされたアクションを定義できます。新しい、AccessibilityNodeInfo.AccessibilityActionは従来のAccessibilityNodeInfoにあったアクション関連のAPIを置き換えます。
・Android5.0はアプリに音声読み上げ機能について、より決めの細かい制御を提供します。新しいVoiceクラスによりアプリで特定の地域や品質、遅延、音声読上げエンジン特有のパラメータに関する音声プロファイルが使用できます。

IME

入力言語を簡単に切り替える

Android5.0でプラットフォームがサポートしている全てのinput method editors (IME)間をより簡単に切り替えることが出来るようになりました。指定された切り替えアクション(一般的にソフトウェアキーボード上で地球のアイコンにタッチする)を行うことでそれら全てのIME間を循環します。この切替は、shouldOfferSwitchingToNextInputMethod()メソッドで行われます。

くわえて、フレームワークは次のIMEに切り替え機能があるか(そして以降のIMEへの切り替えをサポートしているかどうか)を調べます。
IMEの切り替えメカニズムは、切替機能がないIMEをサークルに入れません。この振る舞いの変更はswitchToNextInputMethod()で実装されます。

更新されたIME切り替えAPIについて使い方の例を学ぶには、サンプルに有る更新されたソフトキーボードの実装を参照してください。IMEを切り替える実装についてより多くを学ぶにはCreating an Input Methodを見てください。

マニフェスト宣言

宣言する必要がある機能

以下は現在サポートされている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

User permission

以下はサポートされた。uses-permissionの値です。関連したAPIにアクセスするにはpermissionの宣言が必要です。
BIND_DREAM_SERVICE:API level21以上をターゲットにしている場合はDaydreamサービスのためにこのPermissionが必要です。これにより、システムがバインドできることを保証できます。


Except as noted, this content is licensed under Creative Commons Attribution 2.5. For details and restrictions, see the Content License.

前:Android Lollipopの概要 次:ChromeCast長期レビュー

関連キーワード

[Android][Java][モバイル][IT][翻訳]

コメントを投稿する

名前URI
コメント