Quantcast
Channel: kenji matsuokaのニッキ
Viewing all articles
Browse latest Browse all 342

L Developer Preview API 概要和訳

$
0
0
L Developer PreviewのAPI概要が紹介されたので翻訳してみました。
KeyNoteで、あまり詳細が語られなかった部分についても紹介されているほか、実際にどのような実装をするのかなども紹介されています。

原文
L Developer Previewにより近日公開される新しいAndroidプラットフォームを事前に見て、ユーザーと開発者に新機能を提供します。このドキュメントでは注目すべきいくつかのAPIを紹介します。

L Developer Previewはアーリーアダプターの開発者とテスターを対象としています。Androidフレームワークが目指す先に影響をあたえることに興味があるならばL Developer Previewを試してみて私たちにフィードバックを送ってください。

注意:L Developer Previewを使ったアプリをGoogle Play Storeで公開しないでください。
メモ:このドキュメントではdeveloper.android.com上で紹介されていないクラスやメソッドも紹介しています。これらのAPI要素はコードの形式でこのドキュメントで(リンク無し)で提供されます。これらの要素の事前APIドキュメントを得るためにpreview referenceをダウンロードしてください。

重要な振る舞いの変更

すでにAndroidアプリを公開している人は、アプリが近日リリースされる変更点によって影響をうけるかもしれません。

新しいAndroid Runtime(ART)

4.4のリリース時に新しくAndroid runtime(ART)が実験的に導入されました。4.4においてARTはオプションで標準のruntimeはDalvikでした。L Developer PreviewではARTが標準のランタイムになります。

ARTの新機能についての概要はIntroducing ARTを見てください。いくつかの主要な機能は以下のとおりです。
・事前コンパイル(AOT)
・ガベージコレクションの改善(GC)
・デバッグのサポートを改善
殆どのAndroidアプリはARTのために何もしなくていいはずです。しかし、Dalvik向けのいくつかのテクニックはARTでは動きません。
もっとも重要な問題について詳しくは Verifying App Behavior on the Android Runtime (ART)を読んで下さい。特に以下の場合は注意が必要です。
・C/C++のコードを使用するためにJava Native Interface(JNI)を使用している。
・Obfuscatorなどの標準的なコードではないコードを生成する開発ツールを使用している。
・compacting garbage collectionと相性の悪いテクニックを使用している。(ARTは現在compacting GCを実装していません。しかしAndroid Open−Source プロジェクトでcompacting GCを開発中です。)

もし、あなたのアプリでnotificationが重要なら

Notificationは新しいマテリアルデザインウィジェットに一致するように白(あるいはとても明るい)背景の上に濃い色の文字で書かれます。あなたのNotificationが新しいカラースキームの上で正しく表示されることを確認して下さい。
・色に関するAssertsを更新するか削除してください
・システムは自動的にアクションアイコンを反転させます。android.app.Notificationを使用してくださいBuilder.setColor()でアイコン画像の周りに丸くアクセントカラーをつけます。
・システムは不透明なアクションアイコンとメインNotificationアイコンを無視します。これらのアイコンは必ずアルファチャネルを持つようにしなければいません。

もしあなたが、現在、音あるいはバイブレーションをNotificationに追加するためにRingtone
MediaPlayerVibratorクラスを使用しているなら、このコードを削除してください。それによってシステムはおやすみモードを使用できます。音やバイブレーションを加えるには代わりにNotification.Builderメソッドを使用してください。

デバイスがアクティブ(アンロックされディスプレイがオン)なときNotificationは(heads-up Notificationと呼ばれる)小さなフローティングウィンドウに表示されます。このNotificationは現在のcompact formに似ていますが、heads-up notificationにはアクションボタンも表示されます。ユーザーは現在のアプリケーションを止めることなく、heads-up notificationによってアクションを起こすか削除することが出来ます。

以下はheads-up notificationが発生しうる例です
・ユーザーのアクティビティーがフルスクリーンモード(アプリがfullScreenIntentを使っている)の場合
・Notiricationの優先度が高く着信音あるいはバイブレーションを使用している場合

図1 フルスクリーンアクティビティにHeads-up notificationが表示された様子。
もし、あなたのアプリが上記の状況でNotificationを実装している場合、Heads-up Notification上で正しく表示されることを確認して下さい。

もしあなたのアプリがRemoteControlClientを使っていたら

L Developer PreviewではロックスクリーンでRemoteControlのためのtransport controlを表示しません。
代わりに、ロックスクリーンとNotificationの両方でMedia playback controlを提供できます。
これにより、メディアボタンでより多くの制御をアプリに提供しながら、ユーザーにはロックスクリーンとアンロック時で一貫したエクスペリエンスを提供します。

L Developer Previewはこのような用途でおすすめの新しいandroid.app.Notification.MediaStyle テンプレートを提供します。MediaStyleはNotification.Builder.addAction()で追加したNotificationアクションをあなたのアプリのメディアコントロールNotificationに組み込まれたCompactボタンに変えます。

新しい android.media.session.MediaSessionクラスを使っている場合(下記Media Playbackコントロールを見てください)Notificationが再生中のMedia Sessionをコントロールすることをシステムに伝えるために、Notification.MedaStyle.setMediaToken()であなたのセッショントークンをアタッチして下さい。

Notification.Builder.setVisibility (Notification.VISIBILITY_PUBLIC)を呼び出して、Notificationが(外部に見せても安全であると指定し)どんなロックスクリーン上でも表示出来るようにします。より詳細はロックスクリーンNotificationを見てください。

もし、あなたのアプリがActivityManager.getRecentTasks()を使用していたら

新しいConcurrent documentとActivities tasks機能は(最近使ったアプリの中で平行してdocumentsとActivitiesを見ることが出来ます)ユーザープライバシーを改善するためにActivityManager.getRecentTasks()は非推奨となります。下位互換性のためにこのメソッドはデータの小さなサブセットを返します。そこには、呼び出しを行ったアプリ自身と、いくつかのセンシティブでないタスク(Homeなど)が入っています。もし、あなたのアプリが自分自身に関連したタスクを取得するためにこのメソッドを使用しているならば、代わりにandroid.app.ActivityManager.getAppTasks()を使用して下さい。

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

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

Androidの新しいマテリアルデザインスタイルがサポートされるようになります。ダイナミックなビジュアルと、ユーザーが自然に感じるUI要素の切り替えを行うことが出来るマテリアルデザインでアプリを作ることが出来ます。このサポートでは以下を含みます。
・マテリアルテーマ
・影の描画
・RecycleViewウィジェット
・Drawableアニメーションとスタイリングエフェクト
・マテリアルデザインアニメーションとActivity切替時のエフェクト
・Viewの状態に基づいたViewプロパティーのアニメーション
・カスタマイズ可能なUIウィジェットとコントロール可能なカラーパレットによるapp bar.
あなたのアプリに追加できるマテリアルデザインについてより学ぶにはマテリアルデザインの章を見てください。

ロック画面Notification

L Developer Previewのロック画面はNotificationを表示できます。ユーザーは設定を通じて、認証を行わずにロック画面に表示出来るNotificationを選択できます。

認証画面を超えてロックスクリーンでNotificationが表示される場合、あなたのアプリは表示する詳細レベルをコントロールできます。android.app.NOtification.Builder.setVisibility()メソッドを呼び3つの値のうちどれか1つを渡します。
・VISIBILITY_PRIVATE Notificationアイコンなど基本的な情報を表示します。しかし、すべての情報は表示しません。
・VISIBILITY_PUBLIC すべてのコンテンツを表示します。
・VISIBILITY_SECRET notificationアイコンを含む一切を表示しません。

VISIBILITY_PRIVATEを使用する場合は個人的な情報を非表示にしたコンテンツのバージョンを提供できます。例えばSMSアプリは「3件のテキストメッセージが有ります」の様に表示してコンテンツのメッセージや送信者については表示しないように作れます。新しいNotificationを提供するために最初に Notification.Builderを使ってNotificationを置き換えて下さい。Private Notificationオブジェクトを作るときは、置換え用のNotificationをNotification.Builder.setPublicVersion()メソッドを通じてアタッチして下さい。

Notification メタデータ

L Developer Previewはユーザーのメタデータに関連してあなたのアプリケーションのNotificationをより知的に並び変えます。メタデータをセットするために、Notificationを作る際にandroid.app.Notification.Builder内の以下のメソッドを呼んでください。
・setCategory() メッセージのカテゴリーを指定します。これにより、システムにDo not Distub(おやすみ)モード時にあなたのアプリのNotificationをどのように取り扱うかを伝えます。(例えば、あなたのNotificationが電話やメッセージを着信した時やアラームだったら)
・setPriority() PRIORITY_MAXあるいは PRIORITY_HIGHが優先度フィールドに設定されサウンド、あるいはバイブレーションを行うNotificationはsmall floating window内に表示されることになります。
・addPerson() アプリがNotificationに人々のリストを加える事が出来ます。システムがNotificationを特定の人でまとめたり、より重要な人々のnotificationの優先度を設定するために使うことが出来ます。

最近使った画面内で、Activityと並行した最近使ったドキュメント

コレまでのリリースでは最近使った画面はそれぞれのアプリで1つのタスクを表示出来るだけでした。現在、アプリは必要に応じてドキュメントごとにそれぞれ並行したActivityとしてより多くのタスクを開くことが出来ます。最近使った画面内においてすべてのアプリで一貫した切り替え方法となることで、ユーザーはそれぞれのActivityやドキュメントを最近使ったアプリで素早く切り替えることが出来るようになり、マルチタスクが簡単になります。そのような並行したタスクの例はウェブブラウザーアプリでタブを開いた時や、制作性のあるアプリ内のドキュメント、平行している試合、あるいはメッセージアプリなどで用いられることになるかもしれません。アプリはandroid.app.ActivityManager.AppTaskクラスを通じてそれらのタスクを管理できます。

論理的なブレイクを入れて、Activityを新しいタスクとしてみなすようにActivityを起動するときに android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENTを使ってください。
manifestのactivityの属性にdocumentLaunchMode="intoExisting " or ="always "を宣言することでもこの振る舞いをすることが出来ます。

Activityが終了されたら、タスクが最近使った画面から削除されるようにマークすることも出来ます。タスクのRoot Activityを実行するときにandroid.content.Intent.FLAG_ACTIVITY_AUTO_REMOVE_FROM_RECENTS を使用してください。manifestのapprication属性にautoRemoveFromRecents=“true”を宣言することでもこの振る舞いをセットできます。
最近使ったアプリが散らからないように、最近使ったアプリ画面内に表示するアプリが持っているタスクの最大数をセットすることが出来ます。manifestのapplication属性android:maxRecentに値をセットしてください。現在のところ指定できる最大数は1ユーザーにつき100タスクです。

WebViewの更新

L Developer PreviewはChrome M36を実装し、バグフィクスに加えてセキュリティーと安定性の改善が行われています。L Developer PreviewにおけるWebViewを実行した時のユーザーエージェント文字列は標準でバージョン番号として36.0.0.0を持ちます。

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

グラフィック

OpenGL ES3.1のサポート

L Developer PreviewはJavaインターフェイスとネイティブでOpenGL ES3.1をサポートします。OpenGL ES3.1には以下の重要な機能が含まれています。
・Compute shaders
・Separate shader objects
・Indirect draw commands
・Multisampleとstencil textures
・Shading languageの改善
・advanced blend modesとデバッグの拡張
・OpenGL ES 2.0と3.0との互換性

GLES31でOpenGL ES3.1 on AndroidのJavaインターフェイスが提供されます。OpenGL ES3.1を使用するとき、manifestファイルのuser-futureタグのandroid:glEsVersion属性を宣言してください。例:

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

どうやってデバイスがOpenGL ESのどのバージョンをサポートしているかを調べるかなど、OpenGL ESを使うためのより多くの情報はOpenGL ES API guideを見てください

Android Extension Pack

OpenGL ES3.1ではさらなるグラフィック機能のためにJava interfacesとネイティブをサポートするextension Packのリリースも提供されます。このExtensionはAndroidによって一つのパッケージとみなされます。ANDROID_extension_pack_es31extensionが存在していたら、あなたのアプリはパッケージのすべてのExtensionが存在すると仮定でき、1つの#extensionステートメントでshading languageを有効にできます。

extension packがサポートするもの
・shader storage buffers とimages、atomicのための fragment shaderのサポートを保証(fragment shaderはOpenGL ES3.1ではオプションの扱いです)
・Tessellationとgeometry shaders
・ASTC(LDR)テクスチャ圧縮フォーマット
・Per -sample interpolationとshading
・フレームバッファ内でのDifferent blend modes for each color attachment
GLES31Extでextension packのJavaインターフェイスが提供されます。アプリのmanifestでuses-featureタグによりextensionpackのサポートを必須要件として宣言できます。しかし、この構文はL Developer Previewの時点では最終確定していません。

マルチメディア

進化したカメラ機能のためのCamera API

L Developer Previewはきめ細かい写真撮影と画像処理を容易にするための新しい android.hardware.camera2 API を導入します。
プログラム上でCameraManager.getCameraIdList ( )でシステムが使用できるカメラデバイスにアクセスしCameraManager.openCamera() で特定のデバイスと接続できます。画像のキャプチャーを開始するために CameraCaptureSession を作成し、取得した画像を表示するSurfaceオブジェクトを指定します。 CameraCaptureSessionは1枚の写真を取るか、バーストモードで複数枚の写真を取るか指定できます。
新しい写真が撮影されたことを通知されるように、CameraCaptureSession.CaptureListener()のインターフェイスを実装しcapture Requestにセットしてください。
システムがimage capture requstを完了した時、CameraCaptureSession.CaptureListener()がonCaptureCompleted()を受け取るようになり。CaptureResutのimage captureメタデータが提供されます。

更改されたCamera APIの使い方のサンプルは、このリリースに含まれているCamera2BasicとCamera2Videoの実装サンプルを見てください。

オーディオプレイバック

このリリースではAudioTrackに以下の変更点が含まれます。
・ アプリは浮動小数点フォーマットのオーディオデータを提供できます。(android.media.AudioFormat.ENCODING_PCM_FLOAT). これにより素晴らしいダイナミックレンジとより高い精度、最高のヘッドルームが可能になります。浮動小数点演算は特に中間処理で役立ちます。最終的に最後の出力では少ないビット精度のintegerフォーマットなオーディオデータを使用します。(L Developer Previewパイプライン内部はまだ浮動小数点演算ではありません。)
MediaCodecで渡されるのと同じフォーマットで、ByteBufferとして音声データを提供できるようになりました。
・WRITE_NON_BLOCKINGオプションにより簡単にバッファリングと同一アプリでの複数読み込みが出来ます。

Media playback control

新しいandroid.media.session.MediaController クラスで新しいメディアコントロールアプリを構築できます。そしてそれはRemoteControlClientに変わり、より簡単な transport controls APIs を提供します。
MediaControllerクラスはUIプロセス以外からプレイバックのスレッドセーフなコントロールを可能にするので、あなたのアプリのユーザーインターフェイスから、メディアプレイサービスのコントロールがより簡単になります。あなたは再生中の同一MediaSessionにプレイバックコマンドやメディアキー、その他イベントを送る複数のコントローラーを作成することも出来ます。コントローラーを追加するときは、 MediaSession.getSessionToken ( )を呼び、アプリがセッションと相互作用するためのアクセストークンをリクエストする必要があります。再生、停止、スキップ、評価の設定などの transport commandsをMediaController.TransportControls.を使って送ることが出来ます。セッションにアタッチされたコントローラーから返されるtransport commands をハンドルするためにMediaSession.TransportControlsCallback .のコールバックメソッドをOverrideしてください。

新しいandroid.app.Notification.MediaStyleクラスを使ってメディアセッションと結びついた高機能なNotificationを作ることも出来ます。新しいNotificationとmedia API群を使えば、System UIに再生しているコンテンツを確実にを認識させることが出来て、付加情報やアルバムアートを表示させることが出来ます。

ストレージ

ディレクトリの選択

L Developer Previewはユーザーにディレクトリーサブツリー全体を選ばせ、含まれるすべてのドキュメントに対する読み書きのアクセスを各アイテムごとの認証を必要とせずアプリに対して与えることが出来るようにStorage Access Frameworkを拡張しました。

ディレクトリサブツリーを選択するために、android.intent.action.OPEN_DOCUMENT_TREE Intentを作って送ります。システムはサブツリーを選択することが出来る全てのDocumentsProviderインスタンスを表示し、ユーザーにディレクトリを探して選択させ、選択されたサブツリーへのアクセスを示すURIが返されます。DocumentsContract.buildChildDocumentsUriUsingTree()とDocumentsContract.buildDocumentUriUsingTree()とともにContentResolver.query()を使用してサブツリー内を調べることが出来ます。

新しいDocumentsContract.createDocument() メソッドはサブツリー内のどのディレクトリでも新しいドキュメントを作成することが出来ます。既に存在するドキュメントを管理するにはDocumentsContract.renameDocument() とDocumentsContract.deleteDocument()を使います。これらを呼び出す前に、メソッドがサポートされているかを確認するため、DocumentsContract.Document.COLUMN_FLAGS をチェックしてください。

もし、あなたがDocumentsProvider を実装していて、サブツリー選択をサポートしたいのであれば、 DocumentsProvider.isChildDocument( ) を実装して、あなたの Root.COLUMN_FLAGS.内にDocuments.Contract.FLAG_SUPPORTS_IS_CHILD を含めてください。

L Developer PreviewはあなたのアプリがMediaStoreに内包させるために、メディアファイルを置くことが出来るShared storage上のパッケージ指定ディレクトリーも導入しました。新しい android.content.Context.getExternalMediaDirs ( ) がすべてのshared storage devicesのこれらのパスを返します。

Context.getExternalFilesDir()と同様にこの返されたパスにアプリがアクセスするのにpermissionを追加する必要はありません。
プラットフォームは定期的に新しいメディアファイルがないかスキャンを行います。あなたはMediaScannerConnectionを使って明示的に新しいコンテンツをスキャンさせることも出来ます。

ワイヤレスと接続性

複数ネットワークとの接続

L Develper Previewは新しいmulti-networking API群を提供します。これらは動的に特定の能力を備えている利用可能なネットワークをスキャンし、そのネットワークとの接続を確立します。これはあなたのアプリが特定のネットワーク(SUPL,MMS、キャリア支払いネットワーク、あるいは特定の種類のトランスポートプロトコル)を使ってデータを送りたい場合などに便利です。

あなたのアプリで動的にネットワークを選び接続したい場合は以下のステップを踏みます。
1.ConnectivityManager.を作る。
2.アプリで興味があるネットワーク機能と転送タイプを指定するandroid.net.NetworkRequestを作る。
3.適切なネットワークをスキャンするために、ConnectivityManager.requestNetwork()かConnectivityManager.registerNetworkCallback()を呼び、NetworkRequestオブジェクトを渡し、ConnectivityManager.NetworkCallbackListenerを実装する。

システムが適切なネットワークを見つけるとネットワークに接続しNetworkCallbackListener.onAvailable()コールバックを呼び出します。コールバックからネットワークに関する追加情報を受け取ったり、選択されたネットワークを使って直接データを送受信するために android.net.Network オブジェクトを使用できます。

Bluetoothブロードキャスティング

Android4.3はCentral roleでBluetooth Low Energy(BLE)のプラットフォームサポートを導入していました。L Developer PreviewではAndroidデバイスはBluetooth LE peripheral deviceとして返答を返すことが出来るようになりました。アプリはこの機能を使って自身の存在を周辺のデバイスに知らせることが出来ます。例えばデバイスを万歩計や健康モニターとして機能させ、そのデータを他のBLEデバイスに伝えるアプリを作ることが出来ます。

新しいandroid.bluetooth.le API群であなたのアプリはadvertisementsをブロードキャストし応答をスキャンして近くのBLEデバイスと接続する事ができるようになります。新しいadvertisingを使ったり、機能をスキャンするためにはmanifestのpermissionにandroid.permission.BLUETOOTH_ADMINを追加する必要があります。
Bluetooth LE advertisingを開始して、他のデバイスがあなたのアプリを発見できるようにするために、android.bluetooth.le.BluetoothAdvertiser.startAdvisertising ( )を読んで、android.bluetooth.le.AdvertiseCallback の実装を渡します。コールバックオブジェクトは advertising operationの成功または失敗の報告を受信します。

L Developer Previewは android.bluetooth.le.ScanFilter クラスを導入し、あなたのアプリは興味があるデバイスのタイプだけに限定してスキャンを行うことが出来ます。Bluetooth LEデバイスのスキャンを開始するために、android.bluetooth.le.BluetoothLeScanner.startScan() を呼びフィルターのリストを渡します。メソッドを呼び出すときにはBluetooth LE advertisement が見つかった時にレポートを受け取るためのandroid.bluetooth.le.ScanCallbackの実装も渡す必要があります。

NFCの機能拡張

L Developer PreviewはNFCをより幅広く柔軟に使えるようにする機能拡張を加えました。
・Androidビームは共有メニューから使用可能です。 android.nfc.NfcAdapter.invokeBeam ( ) を呼ぶことでユーザーのデバイスでデータを共有するAndroid Beamが実行できます。これにより、ユーザーはデーターの転送を完了させるのに手動でNFCが使用可能な他のデバイスに向きあわせてから画面をタップする必要がなくなりました。
・新しいandroid.nfc.NdefRecord.createTextRecord() メソッドを使い、UTF-8のテキストデータを含むNDEFレコードを作れます。
・もし支払いを行うアプリを作っているならば、android.nfc.cardemulation.CardEmulation.registerAidsForService()を呼んで動的にNFC application ID (AID) を登録することが出来るようになりました。preferred cardエミュレーションサービスをセットするためにandroid.nfc.cardemulation.CardEmulation.setPreferredService()を使うことも出来ます。コレを行う時には特定のActivityが最前面である必要があります。

エネルギー効率

スケジュールされたジョブ

L Developer Previewは新しいandroid.app.job.JobScheduler APIを提供します。これは、システムによって非同期で遅れて、あるいは(充電中などの)特定の状態の時に実行するジョブを定義することでバッテリー寿命を最適化させます。これは以下の様なときに有効です。
・アプリはユーザーが直接触れることがない遅延して行ってもいいタスクを持ってる。
・アプリは端末が充電されるときに実行するのが望ましいタスクを持っている。
・アプリはネットワークアクセス(あるいはさらにWi-Fiでの接続が必須)のタスクを持っている。
・アプリは定期的なスケジュールに基づくバッチとして実行される複数のタスクを持っている。
作業のユニットはandroid.app.job.JobInfo オブジェクトでカプセル化されます。このオブジェクトはスケジューリングにおいて実行の基準となる正確な説明を提供します。

スケジュールされたタスクの実行条件を設定するためにandroid.app.job.JobInfo.Builderを使用してください。特定の条件下になった時スケジュールされたタスクを実行させることが出来ます。例えば
・デバイスが充電されている
・デバイスが課金されないネットワークに接続した
・システムがデバイスがアイドル状態であると判断した
・最小の遅延時間あるいは、特定のデッドラインに到達した

例えば、以下のようなコードを加えて課金されないネットワーク上で実行されるタスクを加える事が出来ます。

JobInfo uploadTask = new JobInfo.Builder(mJobId, mServiceComponent)
.setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED)
.build();

JobScheduler jobScheduler =
(JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE)
jobScheduler.schedule(uploadTask);

JobScheduler APIの使用例を見るためにこのリリースに含まれているJobSchedulerSampleを参照してください。

エネルギーを計測するための開発者ツール

L Developer Previewはあなたのアプリがどのようにバッテリーを使用しているか計測し理解するのを手助けするいくつかの開発者ツールとAPI群を提供します。
batterystats
dumpsys batterystatsコマンドは一意のユーザーID(UID)によって組織されたデバイスにおけるバッテリーの使用に関する興味深い統計データを作ることが出来ます。ツールで作成されるデータには以下の様な内容が含まれます。
・イベントに関連したバッテリーの履歴
・デバイス全体の統計
・UIDごととシステムコンポーネントで使われた電力
・アプリごとにパケットあたりのmobile時間
・システムUIDを取りまとめた統計
・アプリUIDを取りまとめた統計

--helpオプションを使って、出力をまとめるオプションの種類について学ぶことが出来ます。例えば、特定のapp packageが最後に充電されてからのバッテリー使用状態の統計を取得するには以下のコマンドを実行します。

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


Battery Historian
Battery Historianツール(historian.per)はL Developer Previewから渡されたバグレポートを解析し、電力に関係したイベントの視覚的なHTMLを作ります。
Power Monitorのデータから電力消費量のデータを視覚化したり、電力を使用するロックを起こすシーンのマップも行います。Battery HistorianツールはSDK/toolsフォルダの中にあります。

図2 Battery Historianによって作られた視覚的なHTML
最適な結果を得るために、あなたは最初に完全なwake lockレポートを有効にし長時間にわたりBattery Historian toolが計測できるようにする必要があります。

$ adb shell dumpsys batterystats --enable full-wake-history

計測を開始する前にバッテリーの統計をリセットもしなくてはいけません。

$ adb shell dumpsys batterystats --reset

視覚的なHTMLを生成します

$ historian.par [-p powerfile] bugreport.txt > out.html


企業向け

管理されたプロビジョニング

L Developer Previewは企業内でアプリを実行するための新しい機能を提供します。device administratorはco -presentを加えるために管理されたプロビジョニングプロセスを開始できます。もし、ユーザーが既に個人アカウントを持っているなら、デバイスの管理されているプロファイルは切り離されます。
管理されたプロファイルに関連するアプリはユーザーのランチャーや最近使ったアプリ画面、Notificationの中で管理されていないアプリと一緒に表示されます。

管理されたプロビジョニングプロセスを開始するために、ACTION_PROVISION_MANAGED_PROFILEのIntentを送信します。呼び出しが成功したら、システムはandroid.app.admin.DeviceAdminReceiver.onProfileProvisioningComplete() コールバックを発行します。そしてあなたはapp.admin.DevicePolicyManager.setProfileEnabled()を呼びこの管理されたプロファイルを有効にできます。

もし、あなたがランチャーアプリを開発しているなら、新しい android.content.pm.LauncherAppsクラスを使い、現在のユーザーと、ユーザーに関連した管理済みプロファイルで実行可能なActivityのリストを取得できます。
あなたのランチャーはandroid.os.UserManager.getBadgeDrawableForUser()のicon drawableで「仕事」バッジを追加し、管理されたアプリを視覚的に表示できます。

新機能をどのように使うかの例を見るためにこのリリースに含まれているBasicManagedProfileの実装サンプルを見てください。

図3ランチャースクリーンに表示された管理済みアプリ(ロックバッジによりマークされている)

タスクロック

L Developer Previewはtask locking APIを導入します。これはあなたにユーザーがアプリを終了したり、Notificationによってアプリが中断されるのを一時的に制限する事ができます。これは例えばAndroid上で手厚い支援が必要な教育アプリを開発するようなときに使用できます。
あなたがアプリActivityでこのモードを実行させたら、このモードが終了するまでユーザーはNotificationが見られなくなり、他アプリにアクセスできなくなり、ホーム画面に戻ることが出来ません。

許可無く使用されないように、許可されたアプリだけがタスクロックを起動できます。加えてtask lockingの認証は特別に設定されたオーナーアプリによってandroid.app.admin.DevicePolicyManager.setLockTaskComponents ( )を通じて与えられなければいけません。デバイスオーナーをセットアップするには以下のステップを行います。
1.userdebutが実行しているデバイスを開発マシンに接続する。
2.デバイスにowner appをインストールする
3.device_owner.xmlファイルを作成し デバイスの/data/systemに保存する。

$ adb root
$ adb shell stop
$ rm /tmp/device_owner.xml
$ echo "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
>> /tmp/device_owner.xml
$ echo "&device-owner package=\"<your_device_owner_package>\"
name=\"*<your_organization_name>\" />" >> /tmp/device_owner.xml
$ adb push /tmp/device_owner.xml /data/system/device_owner.xml
$ adb reboot

アプリでタスクロックAPIを使用する前にDevicePolicyManager.isLockTaskPermitted()を呼んでactivityが認証されていることを確認して下さい。

Activityのタスクをロックするために、認証されたActivityからandroid.app.Activity.startLockTask() を呼びます。

タスクロックが有効化されたら以下の様な影響があります。
・ステータスバーは透明になり、ユーザーNotificationとステータス情報は非表示となります。
・ホームボタンと最近使ったアプリボタンは非表示となります。
・現在のアプリが新しいActivityを開始しても新しいタスクをそれ以上作りません。
・認証されたActivityで Activity.stopLockTask().を呼ぶまでユーザーはあなたのアプリ上でロックされたままとなります。

印刷フレームワーク

bitmapとしてPDFを描画

新しいandroid.graphics.pdf.PdfRendererクラスを使って印刷のためにビットマップ画像の中にPDFドキュメントページを描画できます。システムが印刷できるコンテンツを描画するときにシークできるようにする(つまりコンテンツにランダムアクセス出来るようにする)にはParcelFileDescriptorを指定する必要があります。openPage( )により描画されるページをアプリで取得することが出来ます。次にrender ( )を呼び開かれたPdfRenderer.Pageをbitmapに変換します。ドキュメントの一部をビットマップイメージに変更する場合、追加のパラメーターをセットすることも出来ます。(文書の一部をズームして描画したい場合など)

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

テストとアクセシビリティーの改善

L Developer Previewはテストとアクセシビリティーについて以下のサポートを追加しました。
・ウィンドウアニメーションとコンテンツのフレーム統計をキャプチャーするために新しいandroid.app.UiAutomation.getWindowAnimationFrameStats() とandroid.app.UiAutomation.getWindowContentFrameStats()メソッドを使用できます。これによりテスト中のアプリがスムーズなユーザー・エクスペリエンスを提供するために、あなたに十分なリフレッシュレートでフレームを生成しているかどうか評価する計測テストを書かせます。
・新しいandroid.app.UiAutomation.executeShellCommand ( )により計測テストからシェルコマンドを実行できます。コマンドの実行は接続された開発用PCで実行するadbに似ています。これによりdumpsys , am , content ,pmのようなシェルベースのツールを使用することが出来るようになります。
・アクセシビリティサービスとテストツールはアクセシビリティAPI群(uiautomatorなど)を使って、眼が見えるユーザーが相互作用するスクリーンのウィンドウプロパティに関する詳細な情報を検索することが出来るようになりました。ウィンドウ情報を表すandroid.view.accessibility.AccessibilityWindowInfoオブジェクトのリストを検索するために新しいandroid.accessibilityservice.AccessibilityService.getWindows() メソッドを呼んでください。
・定義された標準・あるいはカスタマイズされたアクションをAccessibilityNodeInfo上に表示するために、新しい android.view.accessibility.AccessibilityNodeInfo.AccessibilityActionを使用することができます。新しいAccessibilityAction クラスはAccessibilityNodeInfo .内にあったアクション関連のAPI群を置き換えます。

IME

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

L Developer Previewではユーザーはより簡単にすべてのinput method editors(IME)を切り替えることが出来るようになりました。切り替えアクションを実行すると(通常ソフトウェアキーボード上の地球アイコンにタッチする)IME間を切り替わります。この変更はInputMethodManager.shouldOfferSwitchingToNextInputMethod ()によって起きます。
加えてフレームワークは次のIMEにスイッチングメカニズムが含まれているかどうかを調べます。(その後のIMEがスイッチをサポートしているかにかかわらず)切り替えメカニズムがないIMEはサイクルから外れます。この変更はInputMethodManager.switchToNextInputMethod.上で起きます。

IME切り替えAI群をどのように使うかの例はこのリリースに含まれている更新されたソフトキーボードの実装サンプルを参照してください。

manifest宣言

uses-futureエレメントで下記の値がサポートされるため、下記の機能が必要なアプリでは対応したデバイスのみにインストールされることを確実にできます。

FEATURE_LEANBACK.Android TVのユーザーインターフェイスをサポートするデバイスのみでアプリがインストールされる。例

<uses-feature android:name="android.software.leanback"
android:required="true" />

FEATURE_WEBVIEW.完全なandroid.webkit.*を実装するデバイスのみでインストールされる



<uses-feature android:name="android.software.webview"
android:required="true" />


L Developer Previewにおけるすべての変更について詳細を見るにはAPI Differences Report.を見てください。

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

Viewing all articles
Browse latest Browse all 342

Trending Articles