細か過ぎて伝わってないけど開発者が知っておきたいAndroid Mの新機能まとめAndroidで動く携帯Javaアプリ作成入門(58)(5/6 ページ)

» 2015年06月23日 05時00分 公開
[緒方聡@IT]

UI関連の変更点

Bluetoothで通信するスタイラス(ペン型デバイス)のサポート

 Android MはBluetoothで通信するスタイラス(ペン型デバイス)を使用して、ユーザーの入力改善をサポートします。ユーザーはスマートフォンやタブレットにスタイラスをBluetoothでペアリングできます。接続している間、タッチスクリーンイベントには位置情報に加えてスタイラスからの圧力とボタン情報が加わります。

 アプリはスタイラスによるボタン押下と、その次のアクションを、新しいView.onStylusButtonPressListenerとGestureDetector.OnStylusButtonPressListenerコールバックを登録することでイベントとして受け取れます。

 MotionEventのメソッドと定数を使用し、スタイラスのボタン操作を検出するには以下のように行います。

  1. ユーザーがアプリ画面のボタンをスタイラスでタッチすると、getTooltype()はTOOL_TYPE_STYLUSを返す
  2. Android Mをターゲットとするアプリは、ユーザーがスタイラスの第一ボタンを押した際に、getButtonState()がMotionEvent.STYLUS_BUTTON_PRIMARYを返す。スタイラスの第二ボタンがある場合、MotionEvent.STYLUS_BUTTON_SECONDARYを返す。ユーザーがボタンを同時押しした場合は論理和(STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY)を返す
  3. アプリのターゲットがAndroid M未満の場合、getButtonState()はスタイラスの第一ボタンを押した場合BUTTON_SECONDARYを、第二ボタンを押した場合はBUTTON_TERTIARYを返す


テキスト選択

 ユーザーがテキストを選択すると、アプリはカット、コピー、ペーストアクションをフローティングツールバーとして表示させることができます。これはアクションバーに表示されるものと同様で、ユーザーの行動に応じたアクションを表示させることができます。

新しいテキスト選択機能の実装例(Behavior ChangesのText Selectionより引用)

 テキスト選択時のフローティングツールバーを実装するには、アプリに以下の修正を施します。

  1. ActivityまたはViewで、startActionMode(Callback)、startActionMode(Callback, ActionMode.TYPE_FLOATING)を呼び出し、ActionModeを変更する
  2. アプリに実装されているActionMode.CallbackをActionMode.Callback2に拡張する
  3. Callback2.onGetContentRect()をオーバーライドする(テキスト選択矩形などを取得する)
  4. 有効な矩形の位置を無効にする場合、ActionMode.invalidateContentRect()を呼び出す


Android TV向け「4Kディスプレー」モード

 Android Mでは、実行するアプリが表示解像度互換のあるハードウエア上で4Kレンダリングにアップグレードすることを要求できます。現在の物理解像度を照会するには、新しいandroid.view.Display.Modeを使用します。UIが低い論理解像度で描画され、物理的な解像度にアップスケールされる場合、解像度が物理的に上がり、Display.Mode.getPhysicalWidth()とgetSize()の返す値が異なる場合があることに注意してください。

さまざまな解像度の画面に対応するAndroid(Google I/O 2015基調講演の動画(YouTube)より引用)

 開発者はWindowManager.LayoutParams.preferredDisplayModeIdプロパティをアプリ内のウインドーに設定することにより、物理解像度を変更するようにシステムに要求できます。この機能は4K解像度に変更したい場合に使用できます。4Kディスプレーモード中は、UIを、例えば1080pなどで、元の解像度でレンダリングされるようにしつつ、SurfaceViewオブジェクトはネイティブ解像度のコンテンツを表示できます。

ColorStateListテーマ

 Android Mでは、テーマ属性がColorStateListをサポートしました。getColorStateList()とgetColor()は非推奨になりました。もし、これらのAPIを呼び出すなら、代わりに新しいContext.getColorStateList()とContext.getColor()を使用してください。

 これらメソッドは、もちろんappcompatライブラリv4のContextCompatでも利用可能です。

通知(Notification)に関する変更点

 Android Mでは、Notificationについて以下のAPI変更がありました。

  • 新しいアラーム専用モードを邪魔しないフィルターNotificationListenerService.INTERRUPTION_FILTER_ALARMSの追加
  • ユーザーのスケジュールリマインダーにおいて、他のイベント(CATEGORY_EVENT)なのか、アラーム(CATEGORY_ALARM)なのかを区別するために使用されているカテゴリ値Notification.CATEGORY_REMINDERの追加
  • 通知に添付できるNotification.Builder.setSmallIcon(Icon)メソッドとNotification.Builder.setLargeIcon(Icon)メソッドを含むandroid.graphics.drawable.Iconの追加
  • アプリから現在の通知が生きているかどうかを調べることができるNotificationManager.getActiveNotifications()の追加。この機能を使うためには「Active Notificationsサンプルアプリ」を参照のこと
通知機能の実装例(Active Notificationsサンプルアプリより引用)

音声対話

 Android Mは音声操作に加えてアプリに音声会話体験を構築する新しい音声対話APIが提供されます。Activityはandroid.app.Activity.isVoiceInteraction()を呼び出して、音声操作に応答したかどうかを判断します。応答があった場合、アプリはandroid.app.VoiceInteractorを使用してユーザーからの音声確認を要求するためにオプションリストなどから選択できます。

 音声操作を実装の詳細については「音声操作開発者サイト」を参照してください。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。