Skip to content

Most visited

Recently visited

navigation

Android O の機能と API

Android O では、ユーザーおよびデベロッパー向けのさまざまな機能を新たに導入しています。このドキュメントでは、デベロッパー向けの新しい機能の一部を紹介しています。

プラットフォームの変更によりアプリが影響を受ける箇所については、Android O での動作変更点をご覧ください。

通知

Android O では通知が再設計されており、一貫性のある簡単な方法で通知の動作や設定を管理できるようになっています。変更点は、以下の通りです。





Android O における通知。
Android O における通知のインライン コントロール。

図 1. 右の画面は Android O における通知のインライン コントロールを示しています。

Autofill フレームワーク

アカウント作成、ログイン、クレジット カードのトランザクションは時間がかかり、エラーが起こりやすいものです。この種のタスクが繰り返し必要となるアプリに対して、ユーザーがストレスを感じる場合があります。

Autofill フレームワークが導入されている Android O ではログインやクレジット カードなどのフォームの入力が簡単になります。ユーザーが自動入力を選ぶと、既存のアプリや新しいアプリは Autofill フレームワークと連携します。

複数の手順を実行すると、アプリがフレームワークと連携する方法を最適化することができます。詳細については、Autofill フレームワークの概要をご覧ください。

ピクチャ イン ピクチャ モード

Android O では、ピクチャ イン ピクチャ(PIP)モードでアクティビティを起動できます。PIP はマルチウィンドウ モードの特殊な形態で、主に動画の再生に使います。PIP モードは、Android TV で既に利用できます。Android O では、この機能が他の Android 端末でも利用できるようになります。

PIP モードのアクティビティは一時停止状態になっていますが、コンテンツは表示し続けます。そのため、アプリが onPause() ハンドラで再生を一時停止しないようにする必要があります。その代わり、動画は onStop() で停止し、onStart() で再生を再開するようにします。詳細については、マルチウィンドウ ライフサイクルをご覧ください。

アクティビティが PIP モードを使えるようにするには、マニフェストで android:supportsPictureInPicture を true に設定します(Android O 以降では、Android TV またはその他の Android 端末で PIP モードをサポートする場合、android:resizeableActivity を true に設定する必要はありません。アクティビティがその他のマルチウィンドウ モードをサポートしている場合は、android:resizeableActivity だけを設定します)。

API の変更

Android O では、新しいオブジェクト PictureInPictureArgs が導入されています。これを PIP メソッドに渡すことによって、PIP モードになっているアクティビティの動作を指定できます。このオブジェクトには、アクティビティの最適なアスペクト比などのプロパティを指定します。

ピクチャ イン ピクチャの追加に記載されている既存の PIP メソッドは、Android TV だけでなく、すべての Android 端末で利用できるようになっています。さらに、Android O では、PIP モードをサポートする以下のメソッドが提供されています。

フォントの利用

Android O には、フォントをリソースとして利用できる XML フォント機能が新しく導入されています。この機能を使うと、フォントをアセットにバンドルする必要はなくなります。フォントは R ファイルでコンパイルされ、システムで自動的にリソースとして利用できるようになります。これらのフォントには、新しいリソースタイプ font を使ってアクセスします。Android O には、システム フォントに関連する情報を取得してファイル ディスクリプタを提供するメカニズムも提供されています。フォントをリソースとして使用する方法やシステム フォントの取得方法の詳細については、フォントの利用をご覧ください。

アダプティブ アイコン

Android O では、アダプティブ ランチャー アイコンが導入されています。アダプティブ アイコンは視覚効果をサポートし、端末モデルごとに異なる図形を表示できます。アダプティブ アイコンの作成方法について詳しくは、アダプティブ アイコン プレビュー機能ガイドをご覧ください。

色の管理

Android のイメージング アプリのデベロッパーは、広色域ディスプレイを搭載した新しい端末の機能を活用できるようになります。広色域イメージを表示するアプリは、マニフェストに(アクティビティごとに)フラグを設定し、埋め込み広色域プロファイル(AdobeRGB、Pro Photo RGB、DCI-P3 など)を使ってビットマップを読み込む必要があります。

Wi-Fi Aware

Android O では、Neighbor Awareness Networking(NAN)仕様に基づいた Wi-Fi Aware のサポートが追加されています。この機能によって、インターネット アクセス ポイントがなくても、適切な Wi-Fi Aware ハードウェアを搭載した端末のアプリであれば、Wi-Fi 経由で近くの端末を検出して通信できるようになります。Google は Wi-Fi Aware テクノロジーを可能な限り多くの端末に導入するために、ハードウェア パートナーと連携して作業を進めています。アプリに Wi-Fi Aware を組み込む方法の詳細は、Wi-Fi Aware をご覧ください。

コンパニオン端末のペア設定

Android O では、Bluetooth、BLE、Wi-Fi でコンパニオン端末とペア設定を行う際に、ペア設定リクエスト ダイアログがカスタマイズできる API が提供されています。詳細については、コンパニオン端末のペア設定をご覧ください。

Android での Bluetooth の使用について詳しくは、Bluetooth ガイドをご覧ください。Android O 独自の Bluetooth に対する変更点については、Android O での動作変更点ページの Bluetooth をご覧ください。

WebView API

Android O には、アプリにウェブ コンテンツを表示する WebView オブジェクトを管理するときに役立つ複数の API が用意されています。アプリの安定度とセキュリティを改善する API には次のものがあります。

これらの API の詳細については、WebView の管理をご覧ください。

ピン留めされたショートカットとウィジェット

Android O では、アプリのショートカットやウィジェットのアプリ内ピン留めが導入されています。アプリ内で、サポートされているランチャー用のピン留めされたショートカットやウィジェットを作成できます。これには、ユーザーのパーミッションが必要です。

詳細については、プレビュー機能ガイドのピン留めされたショートカットとウィジェットをご覧ください。

ユーザー補助機能

Android O では、独自のユーザー補助機能サービスを作成するデベロッパー向けに次のユーザー補助機能がサポートされています。

言語の検出
テキスト読み上げ(TTS)ツールが指定したテキスト範囲内で選択した言語を識別するには、detectLanguages() を使用します。このメソッドは、Android O で導入された TextClassificationManager クラスに含まれます。TextLanguage オブジェクトの結果リストを使用して、特定の言語に割り当てられたテキストの範囲と、TTS が言語を特定のテキストのサブセットにどのように割り当てたかを特定できます。
ユーザー補助機能ボタン

サービスでは、android:accessibilityFlags 属性内に FLAG_REQUEST_ACCESSIBILITY_BUTTON フラグを設定して、ユーザー補助機能ボタンがシステムのナビゲーション領域内に表示されるようにリクエストすることができます。このボタンを使用すると、端末上の任意の画面からサービスの機能を簡単にアクティブ化することができます。サービスでは、registerAccessibilityButtonCallback() を使用して、ボタン操作コールバックを登録できます。

注: この機能は、ソフトウェアによってレンダリングされたナビゲーション領域を提供する端末上でのみ利用できます。isAccessibilityButtonAvailable() メソッドと onAvailabilityChanged() コールバックを使用して、ユーザー補助機能ボタンの使用可能状況を追跡します。ユーザー補助機能ボタンが利用できない場合、関連する機能にアクセスする代替方法をサービスのユーザーに用意する必要があります。

指紋認証操作

ユーザー補助機能サービスは、端末の指紋認証センサーに沿った、代替の入力方法である方向性スワイプ(上、下、左、右)にも対応できます。これらの操作に関するコールバックを受け取るには、次の一連の手順を実行する必要があります。

  1. USE_FINGERPRINT パーミッションと CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES 機能を宣言します。
  2. android:accessibilityFlags 属性内に FLAG_CAPTURE_FINGERPRINT_GESTURES フラグを設定します。
  3. registerFingerprintGestureCallback() を使用して、コールバックを登録します。

指紋認証センサーが搭載されていない端末もあることに注意してください。isHardwareDetected() メソッドを使用して、端末がセンサーに対応しているかどうか確認することができます。指紋認証センサーを搭載している端末であっても、サービスがこのセンサーを利用できるのは、認証を得る目的以外の場合に限られます。センサーがいつ利用可能になるを識別するには、isGestureDetectionAvailable() メソッドを呼び出し、onGestureDetectionAvailabilityChanged() コールバックを実装します。

単語レベルでの強調表示

TextView オブジェクトに表示される文字の場所を指定するには、EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY を最初の引数として refreshWithExtraData() に渡します。Bundle オブジェクトが refreshWithExtraData() への 2 番目の引数として提供され、Rect オブジェクトの Parcelable を実装した配列が含まれるようにアップデートされます。Rect オブジェクトはそれぞれ、特定の文字の境界ボックスを示します。

画面上に表示されるコンテンツを定めるため、サービスが TextToSpeech オブジェクトを使用している場合は、テキスト読み上げエンジンがいつ合成語を話し始めるかについてより正確な情報を取得できます。エンジンが特定のテキスト範囲に対応するオーディオの再生を開始すると想定される場合、テキスト読み上げ API からサービスに対し、テキスト範囲の読み上げが onUtteranceRangeStart() コールバックを使用して開始されるという通知が出されます。

TextToSpeechService の独自の実装を作成する場合は、rangeStart() メソッドを使用すると、この新しい機能を利用できます。

ヒントテキスト
サービスは、AccessibilityNodeInfo クラス内で getHintText() メソッドを使用する EditText オブジェクトのヒントテキストにアクセスできます。特定の EditText オブジェクトがヒントテキストを正しく表示していない場合でも、getHintText() メソッドはサービスのヒントテキストを提供します。
継続的な操作ディスパッチ
サービスでは、GestureDescription.StrokeDescription コンストラクタで最後の引数 isContinued を使用することで、同じプログラムによる操作に属するストロークのシーケンスを指定できるようになりました。

アプリを利用しやすくする方法の詳細については、ユーザー補助機能の説明をご覧ください。

パーミッション

Android O では、新しいパーミッションの android.permission.ANSWER_PHONE_CALLS を導入し、アプリが電話の着信に答えることができるようになっています。このパーミッションは Dangerous に分類され、PHONE パーミッション グループの一部です。

アプリで電話の着信を処理するには、TelecomManager クラスで acceptRingingCall() メソッドを使用します。

コンテンツ プロバイダのページング

コンテンツ プロバイダがアップデートされ、大きなデータセットを 1 度に 1 ページずつ読み込む操作がサポートされるようになりました。たとえば、数千枚の画像が登録された写真アプリでは、データのサブセットを取得するクエリを発行してページを表示できます。コンテンツ プロバイダは、各結果ページを単一カーソル オブジェクトとして返します。この機能を使うには、クライアントとプロバイダの両方でページングを実装します。

コンテンツ プロバイダの変更の詳細については、ContentProviderContentProviderClient をご覧ください。

メディアの拡張

メディア メトリクス

新しく追加された getMetrics() メソッドは、設定とパフォーマンスの情報を含む Bundle オブジェクトを返します。このオブジェクトは、属性と値のマップです。getMetrics() メソッドは、以下のメディアクラスで定義されています。

メトリクスは各インスタンスで別々に収集され、インスタンスの有効期間中は存続します。利用できるメトリクスがない場合、メソッドは null を返します。実際に返されるメトリクスは、クラスによって異なります。

MediaPlayer

Android O では、MediaPlayer クラスにいくつかの新しいメソッドが追加されています。これらのメソッドは、次の複数の方法でアプリのメディア再生処理を改善します。

MediaRecorder

メタデータはオフライン処理に有効です。たとえば、センサーからのジャイロ信号を使用して、動画を安定化させるための処理を実行できます。

メタデータ トラックを追加するときは、トラックの mime フォーマットの先頭がプレフィックス「application/」である必要があります。メタデータの記述は、データが MediaCodec から発生しないこと以外は、動画 / オーディオ データの記述と同じです。その代わり、アプリは関連するタイムスタンプとともに ByteBufferwriteSampleData() メソッドを渡します。タイムスタンプは動画トラックおよびオーディオ トラックと同じタイムベースに属している必要があります。

生成された MP4 ファイルは、ISOBMFF のセクション 12.3.3.2 で定められた TextMetaDataSampleEntry を使用し、メタデータの mine フォーマットを示します。MediaExtractor を使用してファイルをメタデータ トラック付きで抽出すると、メタデータの mine フォーマットは MediaFormat に抽出されます。

複数ディスプレイのサポート

Android O 以降では、プラットフォームでの複数ディスプレイのサポートが拡張されています。マルチウィンドウ モードをサポートするアクティビティが複数ディスプレイの端末で実行されている場合、ユーザーはアクティビティを別のディスプレイに移動できます。アプリでは、アクティビティを起動する際に使用するディスプレイを指定できます。

メモ: アクティビティがマルチウィンドウ モードをサポートしている場合、Android O は自動的にそのアクティビティの複数ディスプレイのサポートを有効化します。マルチディスプレイ環境でアプリが適切に動作することをテストする必要があります。

アプリに複数のディスプレイがある場合でも、再開状態になれるのは 1 度に 1 つのアクティビティのみです。再開状態になるのは、フォーカスのあるアクティビティです。表示されているその他のアクティビティは一時停止されますが、停止されません。複数のアクティビティが表示されている場合のアクティビティのライフサイクルの詳細については、マルチウィンドウ ライフサイクルをご覧ください。

ユーザーがアクティビティを別のディスプレイに移動すると、システムはそのアクティビティのサイズを変更し、必要に応じて実行時の変更の処理を行います。アクティビティは自身で構成の変更を処理できます。また、システムによってアクティビティを含むプロセスを破棄し、新しいディメンションでアクティビティを再作成することもできます。詳細については、構成の変更の処理をご覧ください。

API の変更

複数ディスプレイをサポートするために、ActivityOptions に 2 つの新しいメソッドが追加されています。

setLaunchDisplayId()
アクティビティの起動時にどのディスプレイに表示されるかを指定します。
getLaunchDisplayId()
アクティビティの現在の起動ディスプレイを返します。

ツールのアップデート

adb シェルが拡張されて複数のディスプレイをサポートするようになっています。シェルの start コマンドでは、ターゲット ディスプレイを指定してアクティビティを起動できるようになっています。

adb shell start <activity_name> --display <display_id>

新しいアカウント アクセスと Discovery API

Android O では、アプリがユーザー アカウントへのアクセス権を取得する方法について、いくつかの改善事項が導入されています。認証システムは管理するアカウントで、独自のポリシーを使ってアプリに対してアカウントを隠蔽するか公開するかを決定します。Android システムは、特定のアカウントにアクセスできるアプリを追跡します。

以前のバージョンの Android では、ユーザー アカウントの一覧をトラッキングするアプリは、関係のないタイプのアカウントを含むすべてのアカウントのアップデートを取得する必要がありました。Android O では、addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[]) メソッドが追加されています。このメソッドを使うと、アプリで変更を受信するアカウント タイプのリストを指定できます。

API の変更

AccountManager には、どのアプリがアカウントを参照できるかを認証システムで管理するための 6 つの新しいメソッドが追加されています。

Android O では、アプリの可視性レベルを指定するために 2 つの特殊なパッケージ名の値が導入されています。この値は、setAccountVisibility(android.accounts.Account, java.lang.String, int) メソッドでは設定されません。可視性値 PACKAGE_NAME_KEY_LEGACY_VISIBLE が適用されるのは、GET_ACCOUNTS パーミッションを持ち、Android O 以前の Android バージョンを対象としているか、署名が任意の Android バージョンを対象としている認証システムと一致するアプリです。可視性値 PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE は、可視性値があらかじめ設定されておらず、PACKAGE_NAME_KEY_LEGACY_VISIBLE が適用されないアプリのデフォルトです。

新しいアカウント アクセスと Discovery API の詳細については、AccountManagerOnAccountsUpdateListener のリファレンスをご覧ください。

AnimatorSet

Android O 以降の AnimatorSet API で、シーク操作と逆方向の再生がサポートされるようになりました。シーク操作は、アニメーション セットの位置を特定の時間にセットします。逆方向の再生は、元に戻す操作が可能なアクションのアニメーションがアプリに含まれている場合に便利です。別々のアニメーション セットを 2 つ定義しなくても、同じアニメーションを逆順で再生できます。

TextView の自動サイズ設定

Android O では、サイズに応じてテキストのサイズが自動的に拡大縮小される TextView を設定できます。これにより、異なる画面や動的コンテンツでテキストのサイズを最適化するのがはるかに簡単になります。Android O での TextView の自動サイズ設定の詳細については、TextView の自動サイズ設定をご覧ください。

アプリカテゴリ

Android O では、適切な場合、アプリごとに適合するカテゴリを宣言することができます。これらのカテゴリは、データ使用量、バッテリー消費量、ストレージ使用量などに関してユーザーにアプリを提示する際に、目的や機能が似ているアプリをまとめるために使用されます。<application> マニフェスト タグで android:appCategory 属性を設定することで、アプリのカテゴリを定義できます。

新規 StrictMode Detector

Android O では、アプリの潜在的なバグを特定するために使用される 3 つの StrictMode Detector が追加されました。

キャッシュ データ

Android O では、キャッシュ データに関する改善されたガイダンスと動作が提供されます。アプリごとにキャッシュ データにディスク スペースが割り当てられるようになりました。このスペースは、getCacheQuotaBytes(File) によって返されます。

システムがディスク スペースを解放する必要がある場合、割り当てられているスペースのほとんどを占めるキャッシュ ファイルを最初にアプリから削除します。割り当てられているスペースにキャッシュ データを保持していると、キャッシュ ファイルは、必要に応じて消去されるが、システム上に最後まで残るものの一部となります。システムがアプリ内で削除するキャッシュ ファイルを決定するときは、(変更時刻で判別される)最も古いファイルの削除を最初に検討します。

システムがキャッシュ データを解放する方法を制御するために、ディレクトリ単位で有効にできる 2 つの新しい動作も用意されています。

最後に、大きなファイルにディスク スペースを割り当てる必要がある場合は、新規の allocateBytes(File, long, int) API を使用することをお勧めします。この API は、リクエストに応えるため、(必要に応じて)他のアプリに属するキャッシュ ファイルを自動的に消去します。端末に新しいデータを保持できるだけのディスク スペースが十分にあるかどうか判断するときは、デベロッパーの代わりにシステムが消去しようとするキャッシュ データも考慮される getUsableSpace() ではなく getAllocatableBytes(File, int) を呼び出します。

改善されたメディア ファイルへのアクセス

ストレージ アクセス フレームワーク(SAF)を使用すると、アプリがカスタム DocumentsProvider を公開できるようになります。これで、データソース内のファイルへのアクセス権を他のアプリに提供できます。実際には、ドキュメント プロバイダはネットワーク ストレージに常駐する、または Media Transfer Protocol(MTP)のようなプロトコルを使用するファイルへのアクセス権も提供できます。

ただし、リモート データソースから大きなメディア ファイルにアクセスする場合、いくつかの課題があります。メディア プレーヤーは、ドキュメント プロバイダからファイルへのシーク可能なアクセス権を必要とします。大きなメディア ファイルがリモート データソースに常駐する場合、ドキュメント プロバイダがあらかじめすべてのデータを取得しておき、スナップショット ファイル ディスクリプタを作成する必要があります。メディア プレーヤーはファイル ディスクリプタのないファイルを再生できません。そのため、ドキュメント プロバイダがファイルのダウンロードを終えるまで再生を始めることができません。

Android O 以降のストレージ アクセス フレームワークでは、カスタム ドキュメント プロバイダが、リモート データソースに常駐するファイル向けにシーク可能なファイル ディスクリプタを作成できます。SAF は、ネイティブのシーク可能なファイル ディスクリプタを取得するためにファイルを開くことができます。次に、SAF は不連続のバイト リクエストをドキュメント プロバイダに提供します。この機能によって、メディア プレーヤー アプリがあらかじめファイル全体をキャッシュする代わりにリクエストする、正確なバイト範囲がドキュメント プロバイダから戻ります。

この機能を使用する場合、新しい StorageManager.openProxyFileDescriptor() メソッドを呼び出す必要があります。openProxyFileDescriptor() メソッドは ProxyFileDescriptorCallback オブジェクトをコールバックとして受け入れます。SAF は、ドキュメント プロバイダから返されるファイル ディスクリプタでクライアント アプリケーションがファイル操作を実行するたびにコールバックを呼び出します。

ビジネスで使用される Android

エンタープライズ向け Android では、Android O が動作する端末向けに多くの新機能と API を導入しています。プロファイル オーナーと端末オーナー管理モードがより強力かつ生産性的になり、今までよりもプロビジョニングが簡単になりました。さらに、新しいデプロイメント シナリオも有効にしました。

とくに注目すべき機能は次のとおりです。

Android O でのエンタープライズ向け Android の新規 API と機能の詳細については、ビジネスで使用される Android のページをご覧ください。

Java プログラミング言語のアップデート

Android O では、OpenJDK Java 言語機能が Android に追加されました。OpenJDK 8 から java.time、OpenJDK 7 から MethodHandle を含む java.nio.filejava.lang.invoke が追加されました。新しいパッケージについては、API 差分レポートをご覧ください。

This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.