Android 8.0 の機能と API

Android 8.0(API レベル 26)では、 ユーザーとデベロッパー向けに 新機能を提供することにしました このドキュメントでは、デベロッパー向けの最新情報を紹介します。

こちらの <ph type="x-smartling-placeholder"></ph> Android 8.0 の動作の変更点(プラットフォームが変更される領域について) がアプリに影響することがあります。

ユーザー エクスペリエンス

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

Android 8.0 のピクチャー イン ピクチャー。

Android 8.0(API レベル 26)では、 ピクチャー イン ピクチャー(PIP)モード。PIP は 特殊なタイプのマルチウィンドウ モード 主に動画の再生に使用されます。もともと PIP モードは Android TV のみAndroid 8.0 では、この機能が 他の Android デバイスでも使えます。

アクティビティが PIP モードのときは、一時停止状態になりますが、 コンテンツが引き続き表示されます。そのため、アプリの開発においては、 onPause() で再生は一時停止しません。 使用します。代わりに、onStop() で動画を一時停止し、onStart() で再生を再開してください。詳細については、次をご覧ください: マルチウィンドウ ライフサイクルをご覧ください。

アクティビティで PIP モードを使用できるように指定するには、 マニフェストで android:supportsPictureInPicture を true に設定します。 (Android 8.0 以降では、PIP で android:resizeableActivity マニフェスト属性。 ただし、ファイアウォール ルールで アクティビティが他のアクティビティをサポートしている場合は、android:resizeableActivity を「true」に設定 マルチウィンドウ モード

Android 8.0(API レベル 26)では、新しいオブジェクト PictureInPictureParams が導入されています。 これを PIP メソッドに渡して、アクティビティの動作方法を指定します。 クリックします。このオブジェクトでは、変数、 アクティビティのアスペクト比

既存の PIP メソッド( 追加 ピクチャー イン ピクチャーを Android TV だけでなく、すべての Android デバイスで使用できます。また Android 8.0 では、次のメソッドがサポートされています。 PIP モード:

  • Activity.enterPictureInPictureMode(PictureInPictureParams args): アクティビティをピクチャー イン ピクチャー モードにします。アクティビティのアスペクト比 その他の構成設定は、args によって指定されます。フィールド args が空の場合は、前回 Activity.setPictureInPictureParams() と呼ばれます。

    指定されたアクティビティが画面の隅に配置される。残りの部分 画面上にあった以前のアクティビティで画面いっぱいになります。 PIP モードに入るアクティビティは一時停止状態になるが、 開始しました。ユーザーが PIP アクティビティをタップすると、次のメニューが表示されます。 操作するユーザーを指定します。アクティビティに到達している間は、アクティビティに到達しない 割り当てます

  • Activity.setPictureInPictureParams(): アクティビティの PIP 設定を更新します。アクティビティが 現在のモードが PIP モードの場合は、設定が更新されます。これは アスペクト比を変更できます。アクティビティが PIP モードでない場合、 構成設定は、構成環境に関係なく enterPictureInPictureMode() メソッドを呼び出します。

通知

Android 8.0(API レベル 26)では、通知のデザインを 通知の動作をより簡単かつ一貫した方法で管理できるようになります 管理できます。変更点は以下のとおりです。

    Android 8.0(API レベル 26)での通知の長押しメニュー。

    ユーザーはアプリ ランチャー アイコンを長押しして表示できます。 Android 8.0 では通知が無効になっています。

  • 通知チャンネル: Android 8.0 で ユーザーがカスタマイズ可能なチャネルを作成できる、 表示します。ユーザーインターフェースでは 通知カテゴリとして通知チャンネルにマッピングします。手順について詳しくは、 通知チャンネルを実装する方法については、以下をご覧ください。 管理 通知チャンネル
  • 通知ドット: Android 8.0 で、 アプリ ランチャー アイコン上のドットまたはバッジ。通知ドットは、 ユーザーがまだ閉じたり操作したりしていない通知の存在を示すものです。 通知ドットの操作方法については、 通知 。
  • スヌーズ: 通知をスヌーズできます。スヌーズする通知は表示されません。 再表示されることはありません通知が再度表示されます。 重要度が高かったとしますアプリは削除や更新を行えます 更新しても、更新しても 再表示されます。
  • 通知のタイムアウト: 新しいメッセージを作成するとき、 使用すると、 setTimeoutAfter()。 このメソッドを使用すると、通知が送信されるまでの時間を指定できます。 キャンセルすべきです必要に応じて、 指定したタイムアウト時間が経過します。
  • 通知設定: 緊急通報 setSettingsText() アプリの [通知の設定] タブを Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES インテント。 システムは、フィルタするインテントで次のエクストラを提供できます。 アプリがユーザーに表示する必要がある設定(EXTRA_CHANNEL_IDNOTIFICATION_TAGNOTIFICATION_ID
  • 通知の消去: ユーザーは自分で通知を消去できます。 アプリはプログラムで削除できます。通知を送信するタイミングを 拒否される理由と、モジュールを実装することで onNotificationRemoved() メソッドを NotificationListenerService クラス。
  • 背景色: 動画の背景色を設定したり、有効にしたりできます。 通知を受け取ります。この機能は、 タスクの状況を一目で把握できます。対象 たとえば、スペースに関連する通知の背景色を 運転ルート、または通話中であることを表します。また、 使用する背景色を setColor()。そうすることで、 では、setColorized() を使用して通知の背景色を有効にできます。
  • メッセージ スタイル: Android 8.0 では、 MessagingStyle クラスの表示 折りたたまれたフォームで より多くのコンテンツを表示できるようになります MessagingStyle クラス: メッセージ関連の通知があります。また、 addHistoricMessage() メソッドを使用して、会話にコンテキストを提供します。 メッセージ関連の通知に振り分けることができます。

自動入力フレームワーク

アカウントの作成、ログイン、クレジット カードの取引は時間がかかり、 表示されます。このようなタイプを必要とするアプリでは、ユーザーは不満を抱く可能性があります 可能になります。

Android 8.0(API レベル 26)では、ログインなどのフォームへの入力ができるようになっています。 自動入力フレームワークの導入により、簡単に行えるようにしました。 ユーザーがオプトインすると、既存および新規のアプリが自動入力フレームワークで機能する 自動的に入力されます。

いくつかの手順を踏んで、アプリとフレームワークの連携を最適化できます。 詳しくは 自動入力フレームワークの概要をご覧ください。

ダウンロード可能なフォント

Android 8.0(API レベル 26)と Android Support Library 26 では、 フォントを APK にバンドルしたり、ライブラリに APK のダウンロード フォント。この機能により APK のサイズが小さくなり、アプリのサイズも大きくなります インストールの成功率を高め、複数のアプリで同じフォントを共有できます。

フォントのダウンロードについて詳しくは、このモジュールの ダウンロード可能フォント

XML フォント

Android 8.0(API レベル 26)では、XML フォントという新機能が導入されています。 フォントをリソースとして使用できますつまり フォントをバンドルする必要は アセットとして識別されます。フォントは R ファイルにコンパイルされ、自動的に リソースとして使用できるようになります。これらのフォントには 新しいリソースタイプ font のヘルプを確認できます。

サポート ライブラリ 26 は、デバイスでこの機能を完全にサポートしています。 API バージョン 14 以降を実行している必要があります。

フォントをリソースとして使用する方法とシステム フォントを取得する方法について詳しくは、 XML フォントをご覧ください。

TextView の自動サイズ設定

Android 8.0(API レベル 26)では、テキストの拡大または縮小のサイズを TextView のサイズに基づいて自動的に縮小されます。つまり、生成 AI は さまざまな画面や動的コンテンツでテキストサイズを簡単に最適化できます。 Android 8.0 での TextView の自動サイズ調整について詳しくは、 TextView の自動サイズ調整をご覧ください。

アダプティブ アイコン

Android 8.0(API レベル 26)では、アダプティブ ランチャー アイコンが導入されています。アダプティブ アイコンを使用すると、 さまざまなデバイスモデルでさまざまな形状を表示できます。Google Chat で アダプティブ アイコンを作成する方法については、アダプティブ アイコンをご覧ください。 ご覧ください

カラー マネージメント

画像処理アプリの Android デベロッパーが新しいデバイスを活用できるようになりました 広色域対応ディスプレイを搭載した ネットワークデバイスの場合です広色域で表示する イメージの場合、アプリはマニフェストで(アクティビティごとに)フラグを有効にする必要があります 埋め込みのワイド カラー プロファイル(AdobeRGB、 Pro Photo RGB、DCI-P3 など)。

WebView API

Android 8.0 には、アプリの管理に役立つ API がいくつか用意されています。 アプリにウェブ コンテンツを表示する WebView オブジェクト。 アプリの安定性とセキュリティを向上させるこれらの API には、 次のとおりです。

  • Version API
  • Google SafeBrowsing API
  • Termination Handle API
  • Renderer Importance API

これらの API の使用方法について詳しくは、 WebView の管理

WebView クラスに Safe Browsing API を追加してセキュリティを強化しました ウェブ閲覧の方法です。詳細については、次をご覧ください: Google Safe Browsing API

ショートカットとウィジェットを固定する

Android 8.0(API レベル 26)では、ショートカットのアプリ内固定が導入され、 説明します。アプリ内で、固定されたショートカットやウィジェットを ランチャー(ユーザーの許可が必要)です。

詳しくは、 固定ショートカットとウィジェット 機能ガイドをご覧ください

最大画面アスペクト比

Android 8.0(API レベル 26)では、アプリの最大アスペクト比を設定する方法が変更されました。

まず、Android 8.0 では、 maxAspectRatio 属性です。 を使用して、アプリの最大アスペクト比を設定できます。また、Android 8.0 以降では、アプリの デフォルトの最大アスペクト比は、アプリが実行されるデバイスのネイティブ アスペクト比です。

最大アスペクト比の宣言について詳しくは、以下をご覧ください。 複数画面のサポート

マルチディスプレイのサポート

Android 8.0(API レベル 26)以降、このプラットフォームでは、 複数ディスプレイに対応しましたアクティビティがマルチウィンドウ モードと 複数のディスプレイを備えたデバイスで実行している場合、ユーザーはアクティビティを移動できます。 ディスプレイ間で通信できます。アプリがアクティビティを起動すると、アプリは アクティビティを実行するディスプレイを指定できます。

注: アクティビティが Android 8.0 では、マルチウィンドウ モードが自動的に マルチディスプレイのサポートが 可能になりますアプリをテストすることで マルチディスプレイ環境で適切に動作することを確認します。

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

ユーザーがディスプレイ間でアクティビティを移動すると、 アクティビティのサイズを変更し、必要に応じてランタイムの変更を発行します。あなたのアクティビティ 構成の変更を自分で処理することも、システムによる アクティビティを含むプロセスを破棄し、新しい 定義できます。詳細については、次をご覧ください: 構成の処理 変更

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

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

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

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

統一されたレイアウト マージンとパディング

Android 8.0(API レベル 26)では、反対側の側面が View 要素で、同じマージンまたはパディングが使用されている。 具体的には、レイアウト XML で次の属性を使用できるようになりました。 ファイル:

注: アプリのロジックを、 さまざまな 言語や文化(テキストの方向を含む)は、 属性が値に影響を与えることはなく、 <ph type="x-smartling-placeholder"></ph> layout_marginStart layout_marginEnd paddingStart paddingEndこれらの値は、自分で設定することも、自分で設定することもできます。 新しい縦方向と横方向のレイアウト属性を使用して、レイアウトの動作を作成します。 テキスト方向に応じて異なります。

ポインタ キャプチャ

ゲーム、リモート デスクトップ、仮想化クライアントなどの一部のアプリは、 マウスポインタをコントロールすることでメリットを得られます。ポインタ キャプチャは Android 8.0(API レベル 26)の機能であり、すべてのマウスイベントを配信してそのような制御を提供します。 アプリ内のフォーカスのあるビューに 移動できます

Android 8.0 以降では、アプリ内の View で ポインタをキャプチャしてリスナーを定義し、キャプチャされたポインタ イベントを処理します。「 このモードでは、マウスポインタは非表示になります。ビューはポインタのキャプチャを解放できます 呼び出すことができます。システムは ビューがフォーカスを喪失したとき(ユーザーが開いたときなど)のポインタ キャプチャ クリックします。

アプリでこの機能を使用する方法について詳しくは、以下をご覧ください。 ポインタ キャプチャ

アプリのカテゴリ

Android 8.0(API レベル 26)では、各アプリで適合するカテゴリを宣言できます。 できます。これらのカテゴリは、類似のアプリをクラスタ化するために使用されます。 表示する際の目的や機能(データ使用量、バッテリー使用量、 ストレージ使用量。アプリのカテゴリを定義するには、 <application>android:appCategory 属性 使用します。

Android TV ランチャー

Android 8.0(API レベル 26)には、コンテンツ中心の新たな Android TV のホーム画面エクスペリエンス: Android 8.0 の Android TV エミュレータと Nexus Player のデバイス イメージ。新しいホーム画面では、 動画コンテンツを複数の行に配置し、それぞれ 1 つのチャネルに 制御します。アプリは複数のチャンネルを公開でき、ユーザーはどのチャンネルを使用するかを ホーム画面で確認しましょう。Android TV のホーム画面には Watch Next 行もあり、 ユーザーの視聴習慣に基づいて、アプリから番組を自動的に生成します。アプリは 動画プレビュー: ユーザーが番組にフォーカスを合わせると自動的に再生されます。Google Cloud 向けの チャンネルと番組の入力は、Android として配布される TvProvider API に含まれています。 Android 8.0 のサポート ライブラリ モジュール。

AnimatorSet

Android 8.0(API レベル 26)以降、AnimatorSet API でシークと再生がサポートされるようになりました。 使用できます。シークを使用すると、アニメーション セットの位置を特定の位置に 決定できますアプリにアニメーションが含まれている場合は、逆再生は便利です。 で、取り消し可能な操作を確認します。2 つの独立したアニメーションを 同じセットを逆にプレイできます。

入力とナビゲーション

キーボード ナビゲーション クラスタ

アプリ内のアクティビティが、 図 2。UI 要素のグループをクラスタに編成することで、 キーボード ナビゲーションを使用できます。ユーザーは Meta+Tab キーを押すか、 Chromebook デバイスによるクラスタ間の移動。良い例 クラスタには、サイドパネル、ナビゲーション バー、メイン コンテンツ エリア、要素が含まれます。 多数の子要素を含めることが可能です。

ユーザーが操作する 5 つのナビゲーション クラスタを含むアクティビティの例
  キーボード ナビゲーションのクラスタ ショートカットを使用して移動できます。クラスタ
  上部パネル、左側サイドパネル、メイン コンテンツの順に配置されます。
  フローティング アクション ボタンの 2 つがあります。
図 2. 5 つのナビゲーションを含むアクティビティ クラスタ

View 要素または ViewGroup 要素を作成するには 作成する場合は、 <ph type="x-smartling-placeholder"></ph> android:keyboardNavigationCluster 属性 要素のレイアウト XML ファイルで true を指定するか、true を渡します。 アプリの UI ロジックの setKeyboardNavigationCluster() に追加します。

注: クラスタはネストできませんが、ネストはされません。 階層のさまざまなレベルで表示される場合があります。エラーを ネスト クラスタがある場合、フレームワークは最上位の クラスタとして ViewGroup 要素。

タッチスクリーンを搭載したデバイスでは、クラスタ指定 ViewGroup オブジェクト android:touchscreenBlocksFocus 要素を true~ そのクラスタから出入りするナビゲーションをクラスタだけで行えるようにします。これを 追加する場合、ユーザーは Tab キーまたは矢印キーを使用して クラスタ内外への移動、クラスタ ナビゲーションを押す必要があります。 できます。

デフォルトのフォーカスを表示

Android 8.0(API レベル 26)では、変更する必要のある View を (再作成された)アクティビティが再開され、ユーザーが Tab キーなどのキーボードのナビゲーション キーを使用します。この「デフォルトでフォーカス」を適用するには 設定では、View 要素の <ph type="x-smartling-placeholder"></ph> android:focusedByDefault 属性を true に UI 要素を含むレイアウト XML ファイルを指定するか、true を渡して setFocusedByDefault() を 作成する必要があります。

音声出力

アクティビティとサービスは、 TextToSpeech: コンテンツの音声入力と発音を行います。時点 Android 8.0(API レベル 26)以降では、アプリでより正確なタイミング情報を取得できるようになりました。 テキスト読み上げエンジンが個々の合成単語の読み上げを開始すると、 エンジンがこの情報を提供しますこの機能を使用して テキスト読み上げエンジンが話すときに、特定の単語に注意を向けさせる できます。

こうしたテキスト読み上げエンジンの改善をアプリで使用するには、 UtteranceProgressListener のインスタンス。 アプリケーションのハンドラを onRangeStart() メソッドを呼び出します。

テキスト読み上げエンジンは、 録画するにはrangeStart() 特定の範囲のテキストの音声再生を期待する時点 開始してください。そのテキスト範囲の音声の再生が開始されると、アプリの onRangeStart() メソッドが実行されます。アプリは、このコールバックに応答できます。たとえば、 発話に関連するテキスト範囲がハイライト表示されます。

テキスト読み上げの再生状況をトラッキングする方法の詳細 エンジンについては、UtteranceProgressListener クラスをご覧ください。 ご覧ください。

システム

新しい StrictMode 検出機能

Android 8.0(API レベル 26)では、StrictMode 検出機能を新たに 3 つ追加し、 アプリの潜在的なバグ:

  • 次の場合に detectUnbufferedIo() が検出します アプリがバッファリングせずにデータの読み書きを行うと、 向上します
  • detectContentUriWithoutPermission() のアクション 別のアプリの権限の付与を忘れた場合に、アプリが アプリ外でアクティビティを開始する場合。
  • 次の場合に detectUntaggedSockets() が検出します アプリがネットワーク トラフィックを実行します。その際、 setThreadStatsTag(int): デバッグ用のトラフィックにタグを付ける あります。

キャッシュ データ

Android 8.0(API レベル 26)では、キャッシュされたデータに関するガイダンスと動作が改善されています。各 キャッシュ データ用のディスク容量がアプリに付与されます。これは、 getCacheQuotaBytes(UUID)

システムでディスクの空き容量を増やす必要がある場合は、まず、キャッシュに保存されたファイルをアプリから削除します。 割り当てられている割り当てを 超えている場合がありますしたがって、キャッシュされたデータを 割り当てられている場合は、キャッシュされたファイルは、システム上で消去される できます。アプリ内で削除するキャッシュ ファイルの種類を判断する際に、 最も古いファイルを最初に考慮します(変更日時によって決まります)。

また、2 つの新しい動作が用意されており、ディレクトリごとに有効にして、 システムがキャッシュ データを解放する方法:

  • StorageManager.setCacheBehaviorAtomic() を使用すると、 ディレクトリとそのすべての内容を単一のアトミック単位として削除する必要があります。
  • setCacheBehaviorTombstone(File, boolean) を使用すると、 ディレクトリ内のファイルを削除するのではなく、ファイル内の 0 バイトに切り詰める必要があります。 空のファイルはそのまま残ります。

最後に、大きなファイル用にディスク スペースを割り当てる必要がある場合は、 allocateBytes(FileDescriptor, long) API(自動的にクリアされます) (必要に応じて)他のアプリに属するキャッシュに保存されたファイル。使用するかどうかの 新しいデータを保持するのに十分なディスク容量がある場合は、 getAllocatableBytes(UUID)(次を使用) getUsableSpace(): 前者はキャッシュされたものをすべて考慮するため システムがユーザーに代わって消去するデータ

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

コンテンツ プロバイダが更新され、大規模な 1 つずつ表示していきますたとえば、何千もの画像を含む写真アプリは 画像を使用して、ページに表示するデータのサブセットをクエリできます。各ページ コンテンツ プロバイダが返す結果のうち、1 つのカーソルで表される割合 渡されます。使用するためには、クライアントとプロバイダの両方がページングを実装する必要があります。 おすすめします。

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

コンテンツ更新リクエスト

ContentProviderContentResolver 個のクラスにそれぞれ refresh()メソッドを追加し、 確認する必要があります。

カスタム コンテンツの更新ロジックを追加するには、 ContentProvider。必ず 返される refresh() メソッド true: プロバイダのクライアントに、試行したことを示します。 データを手動で更新することもできます。

クライアント アプリは、 別のメソッドを使用して、 refresh()。この呼び出しの メソッドには、更新するデータの URI を渡します。

注: ネットワーク経由でデータをリクエストしている可能性もあるため、 次のように、refresh() を クライアントサイドに送信する必要があります。 このタイプのコンテンツ更新を行う最も一般的な理由は、 スワイプでの更新 現在の UI に最新のコンテンツを表示するよう明示的にリクエストします。

JobScheduler の改善

Android 8.0(API レベル 26)では、JobScheduler にさまざまな改善が加えられています。これらの改善により、アプリの利便性が向上します 新しい背景に合わせて 制限されますため、通常はスケジュールされたジョブを使用して 制限されたバックグラウンド サービスまたは暗黙的なブロードキャスト レシーバに対して適用されます。

JobScheduler の変更点は次のとおりです。

  • スケジュールされたジョブに作業キューを関連付けることができるようになりました。作業アイテムを 呼び出す場合は、 JobScheduler.enqueue()。 ジョブの実行中に、保留中の作業をキューから取り出して処理できます。 この機能は、これまで行っていた バックグラウンド サービス、特に実装を行うサービス、 IntentService
  • Android サポート ライブラリ 26.0.0 では、新しい JobIntentService クラスが導入されています。このクラスは、 IntentService として機能していますが、代わりにジョブを使用します。 Android 8.0(API レベル 26)以降で実行する場合。
  • 今すぐ JobInfo.Builder.setClipData() ClipData をジョブに関連付けます。このオプションにより URI 権限付与をジョブに関連付ける方法は、 権限を Context.startService() に反映させることができます。インテントで URI 権限付与を使用して、 作成されます。
  • スケジュールされたジョブで、いくつかの新しい制約がサポートされるようになりました。 <ph type="x-smartling-placeholder">
    </ph>
    JobInfo.isRequireStorageNotLow()
    デバイスの空き容量が少ない場合、ジョブは実行されません。
    JobInfo.isRequireBatteryNotLow()
    バッテリー残量が限界以下である場合、ジョブは実行されません しきい値このレベルで、デバイスに [バッテリー残量低下] と 警告システム ダイアログが表示されます。
    NETWORK_TYPE_METERED
    ジョブには従量制のネットワーク接続(ほとんどのモバイルデータなど)が必要 説明します

カスタム データストア

Android 8.0(API レベル 26)では、好みに合わせたカスタム データストアを提供でき、 アプリでプリファレンスをクラウドやローカルのデータベースに保存する場合に便利です。 設定がデバイス固有の場合です詳細については、このモジュールの 実装方法については、このモジュールの カスタム データストア

メディアの強化

VolumeShaper

新しい VolumeShaper クラスが追加されました。使用 フェードイン、フェードアウト、クロス フェードなどの短い自動音量移行を実行します。 VolumeShaper で振幅を制御するをご覧ください。 をご覧ください。

音声フォーカスの機能強化

オーディオ アプリは、音声フォーカスをリクエストして破棄することで、デバイスのオーディオ出力を共有します。 アプリは、再生の開始や停止、音量のダッキングなど、フォーカスの変更を処理します。 新しい AudioFocusRequest クラスが追加されました。このクラスを requestAudioFocus(), アプリは、音声フォーカスの変更を処理する際の新しい機能を備えています。 自動ダッキング遅延フォーカス ゲイン

メディア指標

新しい getMetrics() メソッドは PersistableBundle を返す 構成を含むオブジェクト パフォーマンス情報を属性と値のマップとして表します。 getMetrics() メソッドは、次のメディアクラス用に定義されています。

指標はインスタンスごとに個別に収集され、 存続します。利用できる指標がない場合、メソッドは null です。返される実際の指標はクラスによって異なります。

MediaPlayer

Android 8.0(API レベル 26)以降では、MediaPlayer でメディアを再生できるようになります。 DRM で保護された HLS サンプルレベルで暗号化されたメディアです。

Android 8.0 では、 seekTo() コマンドを使用すると、 フレームに移動する際のコントロールを 変更しますこれには、シークモードを指定する 2 番目のパラメータが含まれます。

  • SEEK_PREVIOUS_SYNC は、メディア位置を同期(またはキー)フレームに移動します。 特定の時点の直前または時点のデータソースに 関連付けられているエンティティです
  • SEEK_NEXT_SYNC は、メディアの位置を関連付けられた同期(またはキー)フレームに移動します。 データソースとの結合を行います
  • SEEK_CLOSEST_SYNC は、メディア位置を同期(またはキー)フレームに移動します。 特定の時点に最も近い場所、またはその時点で
  • SEEK_CLOSEST: メディア位置をフレームに移動します(同期とは限りません)。 またはキーフレームなど)に関連付けられたデータソース 生成されます。

連続再生する場合、アプリは SEEK_CLOSEST モードではなく、SEEK_ モードのいずれかを使用する必要があります。このモードは動作速度は比較的遅くなりますが、精度は向上します。

MediaRecorder

  • MediaRecorder は MPEG2_TS 形式をサポートするようになりました。 ストリーミング:

    Kotlin

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
    

    Java

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
    

    MediaRecorder.OutputFormat を参照

  • MediaMuxer 音声と動画のストリームをいくつでも処理できるようになりました制限が解除されました 1 つの音声トラックや 1 つの動画トラックにエクスポートできます。addTrack() を使用する トラックをいくつでもミキシングできます。
  • MediaMuxer では、ユーザー定義のフレームごとのメタデータ トラックを 1 つ以上追加することもできます。 情報です。メタデータの形式はアプリによって定義されます。「 メタデータ トラックは MP4 コンテナでのみサポートされています。

メタデータをオフライン処理に活用できます。たとえば センサーを使って動画の手ぶれ補正を行えます

メタデータ トラックを追加する場合、トラックの MIME 形式を接頭辞で始める必要があります。 「application/」とします。メタデータの書き込みは、動画/音声データの書き込みと同じですが、 データが MediaCodec から取得されたものではないことを確認します。代わりに、アプリは タイムスタンプに関連付けられた ByteBuffer writeSampleData() メソッドを使用します。 タイムスタンプは、動画および音声トラックと同じタイムベースである必要があります。

生成された MP4 ファイルは、セクションで定義された TextMetaDataSampleEntry を使用する ISOBMFF の 12.3.3.2 に準拠して、メタデータの MIME 形式を通知します。MediaExtractor を使用してメタデータ トラックを含むファイルを抽出する場合、MIME メタデータの形式が MediaFormat に抽出されます。

メディア ファイル アクセスの改善

「 <ph type="x-smartling-placeholder"></ph> ストレージ アクセス フレームワーク(SAF)を使用すると、アプリはカスタム DocumentsProvider は、ファイルへのアクセスを許可できます。 他のアプリへの変換を行えます実際、 ドキュメント プロバイダは、ドキュメント、スプレッドシート、 プロトコルを使用するアプリケーションや、 メディア転送プロトコル(MTP)

ただし、リモート データソースからサイズの大きなメディア ファイルにアクセスすると、 課題:

  • メディア プレーヤーでは、ドキュメント プロバイダのファイルに対するシーク可能なアクセス権が必要です。 サイズの大きいメディア ファイルがリモート データソースにある場合、 ドキュメント プロバイダが事前にすべてのデータを取得して、スナップショットを作成する必要がある 使用します。メディア プレーヤーでは、ファイルがないとファイルを再生できません あります。そのため、ドキュメント プロバイダが終了するまで再生を開始できません。 ダウンロードします。
  • 写真アプリなどのメディア コレクション マネージャーは、 アクセス URI に、スコープ設定を使用して外部 SD カードに保存されているメディアに できます。このアクセス パターンでは、 移動、コピー、削除に時間がかかるのです。
  • メディア コレクション マネージャーは、 URI です。そのため、この種のアプリでは、ユーザーが選択を行えない メディア ファイルの保存場所を指定します。

Android 8.0 では、ストレージ アクセスを改善することで、これらの各課題に対処しています。 説明します。

カスタム ドキュメント プロバイダ

Android 8.0 以降では、ストレージ アクセス フレームワークで カスタム ドキュメント プロバイダを使用して、フォルダ内に存在するファイルのシーク可能なファイル記述子を作成します。 リモートデータソースですSAF はファイルを開いてネイティブ シーク可能なファイルを取得できます 使用します。次に SAF が、個別のバイト リクエストをドキュメントに配信します。 接続します。この機能を使用すると、ドキュメント プロバイダは正確な範囲を バイト範囲全体をキャッシュするのではなく、 設定しておく必要があります。

この機能を使用するには、新しい StorageManager.openProxyFileDescriptor() メソッドを使用します。「 openProxyFileDescriptor() メソッドは、コールバックとして ProxyFileDescriptorCallback オブジェクトを受け取ります。SAF は、 クライアント アプリケーションがファイル オペレーションを実行するたびに ドキュメント プロバイダから返されたファイル記述子。

ドキュメントへの直接アクセス

Android 8.0(API レベル 26)以降では、 getDocumentUri() メソッドを次のように変更します。 指定された mediaUri と同じドキュメントを参照する URI を取得します。 ただし、返される URI は DocumentsProvider、メディア コレクション管理者がアクセスできます ドキュメントを直接実行できます。スコープされたディレクトリのツリーを走査する必要はありません。 これにより、メディア管理者はドキュメントに対してファイル操作を実行できるようになります。 大幅に短縮されました

注意: getDocumentUri() メソッドはメディア ファイルのみを検索します。アプリに権限の付与は アクセスを許可する必要があります。アクセス権を取得する方法について詳しくは、 権限の詳細については、リファレンス ドキュメントをご覧ください。

ドキュメントへのパス

Android 8.0(API レベル 26)でストレージ アクセス フレームワークを使用する場合は、 findDocumentPath() メソッド(両方で使用可) DocumentsContractDocumentsProvider クラスを使用して、ドキュメントの特定の場所からファイル システムのルートからのパスを決定 あります。メソッドはこのパスを DocumentsContract.Path オブジェクト。ファイルが 同じドキュメントへのパスが複数定義されている場合、メソッドは 指定された ID のドキュメントに到達するために最も頻繁に使用されるパス。

この機能は、次のような場合に特に便利です。

  • アプリが [名前を付けて保存] 機能を使用するアプリケーションの場所を表示するダイアログ 特定します
  • 検索結果ビューにフォルダを表示するため、子を読み込む必要がある そのフォルダに含まれるドキュメントも検索できます( フォルダに配置されます。

注: アプリに一部のドキュメントのみにアクセスする権限がある場合 findDocumentPath() の戻り値に アプリがアクセスできるフォルダとドキュメントです。

音声再生のモニタリング

AudioManager システム サービスは、 アクティブな AudioPlaybackConfiguration オブジェクトがあり、 には、特定の音声再生セッションに関する情報が含まれます。アプリは この関数を呼び出して、現在有効な構成のセットを取得します。 getActivePlaybackConfigurations()

Android 8.0(API レベル 26)以降では、通知を送信するコールバックを登録して、 1 つまたは複数のコンテナが AudioPlaybackConfiguration 個のオブジェクトが変更されました。そのためには、 registerAudioPlaybackCallback() を呼び出し、 AudioManager.AudioPlaybackCallback。「 AudioManager.AudioPlaybackCallback クラスには、 onPlaybackConfigChanged() メソッド: 音声信号が再生されたときにシステムが 必要があります。

接続

Wi-Fi Aware

Android 8.0(API レベル 26)では、Neighbor に基づく Wi-Fi Aware のサポートが追加されています。 Awareness Networking(NAN)の仕様です。適切な Wi-Fi Aware ハードウェア、アプリ、付近のデバイスが検出して通信できます アクセス ポイントなしで Wi-Fi 経由で利用できます。Google はハードウェアを などのパートナーと協力して、できる限り早く Wi-Fi Aware 技術をデバイスに導入できるようにしました。対象 Wi-Fi Aware をアプリに統合する方法については、Wi-Fi Aware をご覧ください。

Bluetooth

Android 8.0(API レベル 26)では、 機能:

  • 曲ライブラリのブラウジングを可能にする AVRCP 1.4 標準のサポート。
  • Bluetooth Low-Energy(BLE)5.0 規格のサポート。
  • Sony LDAC コーデックを Bluetooth スタックに統合しました。

コンパニオン デバイスのペア設定

Android 8.0(API レベル 26)には、 次のデバイスでコンパニオン デバイスとペア設定しようとした場合のペア設定リクエスト ダイアログ 対応しています。詳細については、次をご覧ください: コンパニオン デバイス ペア設定する

Android での Bluetooth の使用について詳しくは、 Bluetooth ガイドをご覧ください。対象 Android 8.0(API レベル 26)に固有の Bluetooth に関する変更については、 Bluetooth セクション( Android 8.0 の動作の変更点のページ

共有

スマート共有

Android 8.0(API レベル 26)では、カスタマイズされた共有 コンテンツのタイプごとに好みや好みに合った最適な できます。たとえば、ユーザーが領収書の写真を撮ると、Android は 8.0 は経費追跡アプリを提案できます。ユーザーが自撮り写真を撮った場合 より適切に画像を処理できます。Android 8.0 はこれらをすべて学習し、 パターンに従って、パーソナライズできます

スマート共有は、次のような image 以外のコンテンツで機能します。 audio さん、video さん、text さん、URL さん、 その他

スマート共有を有効にするには、最大 3 個の ArrayList を追加します コンテンツを共有するインテントに文字列アノテーションを追加します。アノテーションは、 コンテンツの主なコンポーネントやトピックを記述します。次のコード例 インテントにアノテーションを追加する方法を示します。

Kotlin

val annotations: ArrayList<String> = arrayListOf(
        "topic1",
        "topic2",
        "topic3"
)

intent.putStringArrayListExtra(
        Intent.EXTRA_CONTENT_ANNOTATIONS,
        annotations
)

Java

ArrayList<String> annotations = new ArrayList<>();

annotations.add("topic1");
annotations.add("topic2");
annotations.add("topic3");

intent.putStringArrayListExtra(
    Intent.EXTRA_CONTENT_ANNOTATIONS,
    annotations
);

スマート共有のアノテーションについて詳しくは、 EXTRA_CONTENT_ANNOTATIONS

テキスト分類器

対応デバイスでは、アプリで新しいテキスト分類を使用して、 文字列が既知の分類器エンティティ タイプに一致し、選択候補が取得されます できます。システムが認識するエンティティには、住所、URL、 電話番号、メールアドレスなどです詳細については、次をご覧ください: TextClassifier

ユーザー補助

Android 8.0(API レベル 26)では、 独自のユーザー補助サービスを作成するデベロッパー:

で確認できます。 アプリのユーザー補助機能を強化する方法について詳しくは、 ユーザー補助をご覧ください。

セキュリティとプライバシー

権限

Android 8.0(API レベル 26)では、電話に関連する新しい権限がいくつか導入されています。

  • <ph type="x-smartling-placeholder"></ph> ANSWER_PHONE_CALLS 権限は、アプリが応答することを許可します 電話の着信をプログラマティックに配信します。着信を処理するには 使用したい場合は、 acceptRingingCall() メソッドを呼び出します。
  • <ph type="x-smartling-placeholder"></ph> READ_PHONE_NUMBERS 権限は、アプリに以下の読み取りアクセス権を付与します。 デバイスに保存されている電話番号。

これらの権限は両方とも 危険 両方とも PHONE 権限グループを作成します。

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

Android 8.0(API レベル 26)では、 ユーザー アカウントへのアクセス権を取得します。管理対象のアカウントについては、 独自のポリシーを使用して、アカウントを非表示にするかどうかを 開示するのかを考えます。Android システムは、アプリを実行可能な アクセスを制限することです。

以前のバージョンの Android では、 ユーザーがすべてのアカウントについて 無関係なタイプです。Android 8.0 では、 addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[]) メソッドを使用すると、アプリでアカウント タイプのリストを指定できます。 どのアカウントの変更を受け取るかを指定します

API の変更

AccountManager は、認証システムがどのメソッドを アプリは次のアカウントで参照できます。

Android 8.0(API レベル 26)では、公開設定を指定するための 2 つの特別なパッケージ名が導入されています。 ファイアウォール ルールで setAccountVisibility(android.accounts.Account, java.lang.String, int) メソッドを呼び出します。「 PACKAGE_NAME_KEY_LEGACY_VISIBLE 適用対象は、現在のバージョンで GET_ACCOUNTS ツール、権限、ターゲット バージョンの Android 8.0 より前の Android、または 署名が、任意の Android バージョンをターゲットとする認証システムと一致します。 PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE デフォルトの公開設定値が提供されます。 以前に設定されていないアプリと PACKAGE_NAME_KEY_LEGACY_VISIBLE が次と一致しない: 適用されます。

新しい Account Access API と Discovery API について詳しくは、 参照: AccountManagerOnAccountsUpdateListener

テスト

インストルメンテーション テスト

Android 8.0(API レベル 26)では、アプリの インストルメンテーション テストです。

デフォルト以外のアプリプロセスに対する実行

特定のインストルメンテーション テストの実行対象を指定できるようになりました アプリのデフォルト プロセス外のプロセス。この構成は、 お客様のアプリには、異なるプロセスで実行される複数のアクティビティが含まれています。

デフォルト以外のプロセス計測を定義するには、マニフェストに移動します。 移動して、目的の <ph type="x-smartling-placeholder"></ph> <instrumentation> 要素。追加 android:targetProcess 属性を指定し、値を次のいずれかに設定します。 次のとおりです。

  • 特定のプロセスの名前。
  • プロセス名のカンマ区切りのリスト。
  • インストルメンテーションの実行を許可するワイルドカード("*") で指定されるパッケージ内のコードを実行する起動プロセスに対して android:targetPackage 属性。

インストルメンテーション テストの実行中に、 getProcessName() を呼び出してテストしています。

テスト中に結果を報告する

インストルメンテーション テストの実行中に結果を報告できるようになりました。 代わりに addResults() を呼び出します。

テスト用のモック インテント

アプリの独立した独立した UI テストを簡単に作成できるようにする Android 8.0(API レベル 26)では、 onStartActivity() メソッドを使用します。このメソッドは、 Instrumentation.ActivityMonitor クラスを使用して、特定の 呼び出すことができます。

テストクラスがインテントを呼び出すと、メソッドはスタブを返します。 Instrumentation.ActivityResult オブジェクトで実行される 指定することもできます。テストでこのモック インテント ロジックを使用すると、 渡したインテントをアクティビティがどのように準備して処理するかを まったく別のアプリに送信することもできます。

ランタイムと道具

プラットフォームの最適化

Android 8.0(API レベル 26)では、プラットフォームにランタイムなどの パフォーマンスが大幅に向上します これらの最適化には、同時圧縮ガベージ コレクション、 メモリの使用効率の向上、コードの局所性の向上です

こうした最適化により、起動時間が短縮されるだけでなく、 OS とアプリ。

Java 言語サポートの更新

Android 8.0(API レベル 26)では、いくつかの OpenJDK Java API のサポートが追加されています。

新しく追加されたこれらの API リファレンス ドキュメントをご覧ください。

必要な場合は<ph type="x-smartling-placeholder"></ph> Java 8 言語機能を使用する場合、 最新のプレビュー版をダウンロードしてください。

更新された ICU4J Android フレームワーク API

Android 8.0(API レベル 26)では、 ICU4J Android フレームワーク API は、ICU4J API のサブセットであり、 android.icu パッケージで使用します。これらの API はローカライズ データを使用します。 ローカルにダウンロードされるため、APK をコンパイルしないことで APK のフットプリントを削減できます。 APK 内の ICU4J ライブラリ。

表 1. 使用されている ICU、CLDR、Unicode バージョン 説明します。

Android API レベル ICU バージョン CLDR のバージョン Unicode バージョン
Android 7.0(API レベル 24)、Android 7.1(API レベル 25) 56 28 8.0
Android 8.0(API レベル 26) 58.2 30.0.3 9.0

Android での国際化について詳しくは、以下をご覧ください。 ICU4J のサポートについては、をご覧ください。 Android での国際化

Android Enterprise

新しいエンタープライズ機能と API が、次を実行するデバイス向けに導入されました Android 8.0(API レベル 26)。次のような特徴があります。

  • 完全管理対象デバイスの仕事用プロファイルを利用することで、企業は仕事とプライベートを 両方を管理できます
  • API 委任を使用すると、デバイス オーナーとプロファイル オーナーが API の委任によってアプリ 管理を他のサービスに行えません。
  • プロビジョニング フローのユーザー エクスペリエンスの改善(新しい カスタマイズ オプションなど)を使用することによって、設定時間を短縮できます。
  • Bluetooth、Wi-Fi、バックアップ、セキュリティの新しい管理機能により、 デバイスを管理できます。企業はネットワーク アクティビティ ログを使用して、 サポートします。

これらの新しい Android Enterprise API や機能について詳しくは、 企業の Android をご覧ください。