昨年の11月末より、「Oreo」ことAndroid 8.0のアップデート版となる「Android 8.1」の配布が開始されました。8.1は、MR1(Mentenace Release 1)と呼ばれ、8.0の改良版となり、APIレベルが27になったことに加え、GUIやUX(User Experience)でも改良点があります。また、年が明け2018年になってから、Android 8.1に公衆無線LANサービスの通信速度を推定する機能を搭載したことをTwitter経由で発表しています。

目に見える部分の変更点をまとめておきましょう。

  1. スマートテキスト
  2. 無線LAN関連の変更
  3. Bluetooth関連の変更
  4. 壁紙の色とテーマが連動する
  5. 設定のデザインが変更
  6. その他デザイン関係の変更

となる。このうち、使い勝手に影響がおよぶのは、上位の3つ、特にスマートテキストでしょう。無線LANでは、自宅などの信頼できる場所では、自動的にオンとなり、前述のように公衆無線LANサービスは推定速度を表示できるようになっています。Bluetoothは、ヘッドセットなどの一部のデバイスで、バッテリの残量表示が行えるようになりました。

まずは、一番大きな改良点といえるスマートテキストについて解説します。スマートテキストとは、電話番号、メールアドレス、URL、住所などが表示テキストにある場合、これらを長押し操作で簡単に選択し、対象に対して適切なアプリの起動などが簡単に行えるものです。

スマートテキストを実現するためのAPI "TextClassifier"は、Android 8.0のAPI26で実装されました。これは、入力された文字列を分析して、選択するのに適切な部分や、各部分を処理するのに適当なアプリなどを提案するものです。

Googleは、これをAndroid 8.0の機能として発表していました。昨年の発表時には、この機能は単純なパターン認識アルゴリズムではなく機械学習が使われているとのことでした。テキストを学習させてその中にある住所や電話番号、URL、メールアドレスなどを切り出すニューラルネットワークを構築したようです。

Android 8.0では、スマートテキストを実現するAPIはあったものの、GUI側での対応が遅れていました。一般に、新しいAPIへの対応には、アプリ自体が直接対応する場合と、アプリが利用するGUIパーツ(GUIコントロール)が対応する場合があります。前者では、個々のアプリがAPI機能への対応を行うためにコードの書き換えが必要となり、アプリのバージョンアップが必要です。後者は、アプリが呼び出しているテキスト表示や入力欄などのGUIパーツが対応し、これがAPIの機能を利用するため、アプリ側はコードを変更することなく機能が利用できるようになります。通常は、APIの追加とGUIパーツの対応は同時に行われることが多いのですが、スマートテキストに関しては、APIの追加とGUIパーツの対応に時期的なズレがあったようです。このため、Android 8.0ではAPIはあるものの対応アプリのみだけが機能を提供できていました。Android 8.1でGUIパーツの対応が行われたため、ユーザーに見える機能とし行われたため、ユーザーに見える機能としてて利用可能になったというわけです。

スマートテキストとは?

Android 8.1のスマートテキストとは「長押し」で対象範囲を自動選択し、ポップアップメニューに対象に対して適切なアプリを表示するものです。たとえば住所ならばMapsアプリ、電話番号なら「通話」、メールなら「Gmail」といったアプリをポップアップメニューとして表示します。いろいろと試してみたところ、Webページ上のプレーンテキスト表示に対しては、スマートテキストが動作しているようです。

このとき、URLとメールアドレス、数字の並びは、英数字のみならば、長押しで全体が正しく選択され、ポップアップメニーに適切なアプリが表示されます。ただし、数字の並びに関しては、7桁の数字は3桁目と4桁目の間にハイフンが入っていると郵便番号と解釈され「地図」が候補になりますが、数字のみだと電話番号(市内局番と同じ桁数)となって「電話」が候補になります。また、6桁以下は、電話番号や郵便番号としては認識されませんでした。

URLとメールアドレスは、ドメイン部分が英数字のみだと、長押しで全体が選択されますが、国際化ドメインで日本語を含む場合には、長押しで全体が認識されることはありませんでした。ただし、URLやメールアドレス全体が選択されるように手動で選択範囲を変更すると、ポップアップメニューには、正しくWebブラウザChromeやメールアプリGmailが表示されるようになります。

住所に関しては、日本語でも英語でも長押ししても全体が認識されることはありませんでしたが、手動で住所部分を選択し直すと、アプリとして「地図」が提示されました。選択範囲を変えて試してみると、日本語では「都」、「道」、「府」、「県」や「区」、「市」、「町」などの漢字が2個以上含まれている場合、英語なら 「North」などの方位や「Street」などの単語や、カンマに続いて米国の州の略名(たとえばカルフォルニア州ならCA)などが含まれている場合に選択範囲を住所と認識し、アプリとして地図を提示します。また、架空の住所でも同じで、地名のデータベースを使ってパターンを認識しているわけではないようです。

なお、表示テキストで電話番号やURLなどを認識する機能は、簡単な検索機能、たとえば正規表現などでも検出することが可能です。このため、アンドロイドは、以前からテキスト中の電話番号やURLをリンクとして表示する機能を持っていました。次回は、Android .8.0以前のアンドロイドの挙動と8.1の場合を比較することで、スマートテキストやTextClassifier APIをもう少し詳しく調べてみることにします。

電話番号の選択

  • Android 8.1では、長押しで電話番号部分のみが選択でき、ポップアップメニューに「電話」アプリ(Phone)が表示される

  • Android 8.0では、長押ししても、電話番号の一部しか選択されない

  • 同。電話番号を全体を手動で選択してもポップアップメニューには「電話」アプリは表示されない

メールアドレス

  • Android 8.1では長押しでメールアドレス全体が選択され、ポップアップメニューにGMAILが表示される

  • Android 8.0では、長押ししてもメールアドレス全体は選択されない

  • 同。手動で全体を選択してもGMAILアプリはポップアップメニューには表示されない

  • Android 8.1でも、国際化ドメイン名を使った場合には、長押しでメールアドレス全体を選択できない

  • 同。ただし、手動で選択すれば、国際化ドメイン名でもメールアドレスとして認識されるようだ

URL

  • Android 8.1では、長押しでURLが文章から切り出されて選択され、対応アプリとしてWebブラウザ(Chrome)がポップアップメニューに表示される

  • Android 8.0では、URL全体を手動で選択しても、ポップアップメニューには対応アプリが表示されない

住所

  • Android 8.1でも、住所は日本語でも米国表記でも、長押しで選択することはできなかった

  • ただし、手動で正しい範囲を選択すれば、どちらもポップアップメニューで地図アプリ(MAPS)が表示されるため住所として認識しているようだ

住所とみなされる条件

  • 住所と見なされるのは「都道府県」の各文字や「市」や「区」のような住所に含まれる文字が2つ以上、入っている場合のようだ

  • このため、架空の住所であっても、それらしい単語が含まれていれば、住所として認識する

連続した数字

  • Android 8.1では、7桁以上の連続した数字は電話番号として認識されるが、6桁だと電話番号とは見なされない

  • 同。ただし、7桁の数字でも先頭から4文字目にハイフンがある形式では郵便番号と解釈されて地図アプリがポップアップメニューとして提示される