Android 9 の機能と API

Android 9(API レベル 28)では、ユーザーとデベロッパー向けの優れた新機能が導入されています。このドキュメントでは、主にデベロッパー向けの新機能について紹介します。

新しい API について詳しくは、API 差分レポートをご覧ください。または、Android API リファレンスをご覧ください。こちらの Android 9 の動作の変更点をご覧ください。 プラットフォームの変更がアプリに影響する領域について

Wi-Fi RTT を使用した屋内位置測定

新しい RTT API がアプリの屋内位置測定をサポートします。

Android 9 で IEEE 802.11-2016 Wi-Fi のプラットフォーム サポートを追加 このプロトコルは Wi-Fi ラウンドトリップ時間(RTT)とも呼ばれ、 屋内位置測定の 方法について説明します

RTT に対応したハードウェアを搭載する Android 9 端末では、アプリは RTT API を使用して、近くにある RTT 対応の Wi-Fi アクセス ポイント(AP)との距離を測定できます。デバイスで位置情報サービスが有効になっており、Wi-Fi スキャン([設定] > [位置情報] で設定)がオンになっていること。アプリに ACCESS_FINE_LOCATION 権限が付与されていること。RTT は、端末がアクセス ポイントに接続していなくても利用できます。プライバシーを保護するために、アクセス ポイントまでの距離を判断できるのはリクエスト元のデバイスのみです。アクセス ポイントにはこの情報がありません。

デバイスが 3 つ以上のアクセス ポイントまでの距離を測定する場合は、 マルチラテレーション アルゴリズムを使用して、それぞれの状況に最適なデバイスの位置を推定します。 測定します。結果は通常は 1 ~ 2 メートル以内で正確です。

この精度で位置が測定できると、屋内ナビゲーション、明確な音声制御(例: 「このライトをつけて」)、位置情報をベースとする情報(例: 「このサービスに関してスペシャル オファーはありますか?」)などの精度の高い、位置情報を利用したサービスを開発できます。

使用中の Wi-Fi RTT API については、 <ph type="x-smartling-placeholder"></ph> Android WifiRttScan のデモアプリ。

詳しくは、Wi-Fi 位置情報: RTT を使用したレンジング(距離測定)をご覧ください。

ディスプレイ カットアウトのサポート

さまざまなカットアウト サイズが表示された [開発者向けオプション] 画面

エミュレータを使用してディスプレイの切り欠きをテストする

Android 9 は最新のエッジ ツー エッジ画面をサポートしています。 カメラとスピーカーのディスプレイ カットアウトを含む「 DisplayCutout クラスを使用して、機能面以外の場所と形状、 表示すべきではありません。アラートの存在と配置を 必要に応じて getDisplayCutout() メソッドを呼び出します。

新しいウィンドウレイアウト属性 layoutInDisplayCutoutMode を使用すると、アプリはデバイスのカットアウトの周囲にコンテンツを配置できます。この属性は次のいずれかの値に設定できます。

Android 9 を搭載したデバイスやエミュレータで、画面のカットアウトをシミュレートできます。 次のとおりです。

  1. 開発者向けオプションを有効にします。
  2. [開発者向けオプション] 画面で [描画] セクションまで下にスクロールし、[カットアウトがあるディスプレイのシミュレート] を選択します。
  3. カットアウトのサイズを選択します。

通知

Android 9 では通知機能が強化され、 API レベル 28 以上をターゲットとするデベロッパーが利用できます。

メッセージ通知

MessagingStyle と写真を添付しました。

メッセージ通知

返信と会話を含む MessagingStyle。

Android 9 の機能を含む通知を使用したサンプルコードについては、ユーザーのサンプルをご覧ください。

メッセージ機能の強化

Android 7.0(API レベル 24)以降では、通知から直接メッセージに返信する、または他のテキストメッセージを入力するためのアクションを追加できます。Android 9 では、この機能が次のように改良されています。

  • 会話参加者のサポートを簡素化: Person クラスを使用すると、アバターや URI を含め、会話に参加している人々を特定できます。他にも多くの API、 addMessage() CharSequence ではなく Person クラスを使用するようになりました。Person クラス Builder デザイン パターンもサポートしています。

  • 画像のサポート: Android 9 でメッセージの通知に画像が表示されるようになりました 対応しています。メッセージに setData() を使用して画像を表示できます。次のコード スニペットは、Person の作成方法とイメージを含むメッセージの作成方法を示しています。

Kotlin

// Create new Person.
val sender = Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build()
// Create image message.
val message = Message("Picture", time, sender)
        .setData("image/", imageUri)
val style = Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message)

Java

// Create new Person.
Person sender = new Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build();
// Create image message.
Message message = new Message("Picture", time, sender)
        .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message);
  • 返信を下書きとして保存する: ユーザーが意図せずメッセージ通知を閉じてしまった場合に、システムから送信される EXTRA_REMOTE_INPUT_DRAFT をアプリで取得できます。このエクストラを使用して、アプリのテキスト フィールドに事前入力し、ユーザーが 返信が終了します。

  • 会話がグループ会話かどうかを特定する: setGroupConversation() を使用すると、会話がグループ会話かそれ以外かを明示的に識別できます。

  • インテントのセマンティック アクションを設定する: setSemanticAction() メソッドを使用すると、既読の印をつける、削除する、返信するなど、アクションの意味づけができます。

  • スマート リプライ: Android 9 では、 メッセージ アプリ。使用 RemoteInput.setChoices() 標準的なレスポンスの配列をユーザーに提供できます。

チャンネルの設定、ブロードキャスト、サイレント モード

Android 8.0 では、通知チャンネルが導入されています。これにより、表示する通知の種類ごとに、ユーザーがカスタマイズ可能なチャンネルを作成できるようになります。Android 9 では、以下の変更により、通知チャンネル設定がシンプルになっています。

  • チャンネル グループのブロック: ユーザーは、アプリの通知設定内でチャンネル グループ全体をブロックできるようになりました。isBlocked() メソッドを使用すると、グループがブロックされたときにそのグループ内のチャンネルの通知を送信しないようにできます。

    さらに、アプリで現在のチャネル グループ設定を照会することもできます。 新しい getNotificationChannelGroup() メソッドを呼び出します。

  • 新しいブロードキャスト インテント タイプ: 通知チャンネルのブロック状態やチャンネル グループが変化した際に、Android システムによってブロードキャスト インテントが送信されるようになりました。ブロックされたチャンネルまたはグループを含むアプリは、そのインテントをリッスンして適切なアクションをとることができます。これらのインテントのアクションとエクストラについて詳しくは 更新された定数リストをご覧ください。 NotificationManager ご覧ください。ブロードキャスト インテントへの対応について詳しくは、このモジュールの ブロードキャスト

  • NotificationManager.Policy に 3 つの新しいサイレント モード優先度カテゴリが追加されました。

  • NotificationManager.Policy には、新たに 7 つのサイレント モード定数が を使用して視覚的な中断を抑制できます。

マルチカメラのサポートとカメラの更新

Android 9 搭載デバイスでは、ストリームにアクセスできます。 2 つ以上の物理的なデバイスから同時に カメラ。 デュアルフロントまたはデュアルバック カメラが搭載されている端末では、シームレスなズーム、ぼかし、立体視など、単一のカメラでは実現できない画期的な機能を実現できます。この API では、論理または融合された 2 台以上のカメラを自動的に切り替えるカメラ ストリーム。

カメラに関するその他の改善点として、最初の撮影の際の遅延を短縮するために役立つ追加のセッション パラメータや、カメラのストリーミングを停止して再開しなくてもカメラ クライアントがさまざまなユースケースを扱えるようにする Surface 共有などがあります。また、ディスプレイを利用したフラッシュをサポートする API や、アプリレベルでのイメージの安定化や特殊効果に利用できる OIS タイムスタンプにアクセスする API が追加されています。

Android 9 では、マルチカメラ API により、FULL または LIMITED 機能を備えたデバイスでモノクロカメラがサポートされます。モノクロ出力は、Y がグレースケール、U(Cb)が 128、V(Cr)が 128 の YUV_420_888 形式で出力されます。

Android 9 では、外部 USB/UVC もサポートしています。 カメラ: オン 対応しています。

ドローアブルとビットマップのための ImageDecoder

Android 9 では、 ImageDecoder このクラスは、最新のアプローチで画像をデコードします。このクラスを使用する BitmapFactory の代わりに使用できます。 および BitmapFactory.Options API

ImageDecoder を使用すると、バイト バッファ、ファイル、URI から Drawable または Bitmap を作成できます。画像をデコードするには、まず createSource() エンコードされた画像のソースを指定します。次に、ImageDecoder.Source オブジェクトを渡して decodeDrawable() または decodeBitmap() を呼び出し、Drawable または Bitmap を作成します。デフォルト設定を変更するには、OnHeaderDecodedListenerdecodeDrawable() または decodeBitmap() に渡します。ImageDecoder は、画像のデフォルトの幅と高さが判明すると、その情報を指定して onHeaderDecoded() を呼び出します。エンコードされた画像がアニメーション化された GIF または WebP である場合、decodeDrawable()AnimatedImageDrawable クラスのインスタンスである Drawable を返します。

イメージのプロパティは、複数の方法で設定できます。

  • デコードされた画像を正確なサイズにスケーリングするには、ターゲットの寸法を setTargetSize()。 サンプルサイズを使用して画像を拡大縮小することもできます。サンプルサイズを setTargetSampleSize() に直接渡します。
  • 拡大縮小された画像の範囲内で画像を切り抜くには、次の呼び出しを呼び出します。 setCrop()
  • 可変ビットマップを作成するには、truesetMutableRequired() に渡します。

ImageDecoder では、カスタマイズされた複雑な効果を画像に追加することもできます。 たとえば角丸や 使用できます。使用 setPostProcessor() 新しい Pod の PostProcessor クラスを使用して、必要な描画コマンドを実行できます。

アニメーション

Android 9 では、GIF および WebP のアニメーション イメージを描画し、表示するための AnimatedImageDrawable クラスが導入されています。AnimatedImageDrawable は次のように動作します。 AnimatedVectorDrawable レンダリング スレッドが AnimatedImageDrawable のアニメーションを実行する点です。 レンダリング スレッドもワーカー スレッドを使用してデコードを行うため、デコードでは 他の処理を妨げる可能性があります。この実装により、 更新や管理なしでアニメーション画像を表示できます。 アプリの UI スレッドの他のイベントを妨げます。

AnimatedImageDrawable は、次のインスタンスを使用してデコードできます。 ImageDecoder。次のコード スニペットは、ImageDecoder を使用して AnimatedImageDrawable をデコードする方法を示しています。

Kotlin

@Throws(IOException::class)
private fun decodeImage() {
    val decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(resources, R.drawable.my_drawable))

    // Prior to start(), the first frame is displayed.
    (decodedAnimation as? AnimatedImageDrawable)?.start()
}

Java

private void decodeImage() throws IOException {
    Drawable decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(getResources(), R.drawable.my_drawable));

    if (decodedAnimation instanceof AnimatedImageDrawable) {
        // Prior to start(), the first frame is displayed.
        ((AnimatedImageDrawable) decodedAnimation).start();
    }
}

ImageDecoder には、画像をさらに変更できるメソッドがいくつかあります。 たとえば、 setPostProcessor() メソッドを使って、円マスクの適用や 丸みを帯びます

HDR VP9 動画、HEIF 画像圧縮、Media API

Android 9 には、ハイダイナミックレンジ(HDR)VP9 Profile 2 のネイティブ サポートが用意されているため、HDR 対応デバイスで YouTube、Google Play ムービーなどのソースから HDR 対応の映画をユーザーに提供できます。

Android 9 では、High Efficiency Image File 形式(HEIF または HEIC)を使用した画像のエンコードもサポートされています。これにより、圧縮率が向上し、ストレージ容量とネットワーク データの使用量が削減されます。HEIF 静止画像サンプルは、 MediaMuxer および MediaExtractor クラスです。Android 9 端末では、この HEIF がプラットフォームでサポートされるため、バックエンド サーバーから簡単に HEIF イメージを送って活用できるようになります。お客様の アプリは共有や表示についてこのデータ形式に対応しているため、HEIF をお試しください。 画像ストレージ形式として使用できますJPEG から HEIC への変換もできます ImageDecoder または BitmapFactory( (JPEG ファイルからのビットマップ)その後、 HeifWriter: HEIF を書き込む YUV バイト バッファからの静止画像、または Surface または Bitmap

メディア指標は AudioTrack AudioRecord、 および MediaDrm クラス。

Android 9 では、MediaDRM クラスにメソッドが導入され、メトリクス、HDCP レベル、セキュリティ レベル、セッション数を取得したり、セキュリティ レベルとセキュア ストップをより詳細に制御したりできるようになりました。詳しくは、API 差分機能 レポートをご覧ください。

Android 9 では、AAudio API に、使用状況、コンテンツ タイプ、入力プリセットなど、いくつかの AAudioStream 属性のサポートが追加されています。これらの属性を使用すると、特定のプロパティに VoIP やビデオカメラのアプリ用に チューニングされていますセッション ID を AAudio ストリームを、エフェクトを含めることができるサブミックスと関連付けます。AudioEffect API を使用してエフェクトを制御します。

Android 9 では、 AudioEffect API: ダイナミクス処理。 このクラスを使用すると、イコライゼーション、マルチバンド圧縮、リミッターなど、複数のステージにわたるチャンネルベースのオーディオ エフェクトを構築できます。「 バンドとアクティブ ステージの数を構成可能で、ほとんどのパラメータを リアルタイムで制御されます。

JobScheduler でデータのコストを管理

Android 9 以降、JobScheduler 携帯通信会社から提供されたネットワーク ステータス信号を使用して、 ネットワーク関連のジョブを実行できます

ジョブは、推定データサイズの宣言、プリフェッチのシグナル、 詳細なネットワーク要件を提供しますJobScheduler は、ネットワークのステータスに基づいて作業を管理します。たとえば、ネットワークの混雑が合図されると、JobScheduler は大きなネットワーク リクエストの実行を先送りする場合があります。定額制のネットワークの場合、JobScheduler は、あらかじめ見出しの一覧を取得しておくなど、プリフェッチ ジョブを実行してユーザー エクスペリエンスを改善する可能性があります。

ジョブを追加する場合は、JobScheduler が作業を適切に処理できるよう、必要に応じて setEstimatedNetworkBytes()setPrefetch()setRequiredNetwork() を使うようにします。ジョブを実行すると 必ず Network オブジェクトを使用してください。 返品元 JobParameters.getNetwork()。 設定しない場合は、暗黙的にデバイスのデフォルト ネットワークが使用されます。 が要件を満たしておらず、意図しないデータ使用の原因となる場合があります。

ニューラル ネットワーク API 1.1

Neural Networks API は、Android 端末上での機械学習を強化するために、Android 8.1(API レベル 27)で導入されました。Android 9 では API が拡張、改善されており、 新たに 9 つのオペレーションがサポートされるようになりました。

既知の問題: ANEURALNETWORKS_TENSOR_QUANT8_ASYMM テンソルを ANEURALNETWORKS_PAD 演算(Android 9 以降で利用可能)に渡す場合、NNAPI を使用した場合の出力と、それより上位の機械学習フレームワーク(TensorFlow Lite など)を使用した場合の出力が一致しない場合があります。マイページ 代わりに <ph type="x-smartling-placeholder"></ph> ANEURALNETWORKS_TENSOR_FLOAT32 解決するまでお待ちください。

さらに、新しい関数も導入されています。 ANeuralNetworksModel_relaxComputationFloat32toFloat16() 計算するかどうかを指定できる ANEURALNETWORKS_TENSOR_FLOAT32 IEEE 754 の 16 ビット浮動小数点数と同程度の範囲と精度を できます。

自動入力フレームワーク

Android 9 では、自動入力に関するさまざまな改善が行われています。 入力時のユーザー エクスペリエンスをさらに向上させるために、 フォームです。アプリで自動入力機能を使用する方法について詳しくは、 自動入力フレームワークのガイドをご覧ください。

セキュリティの機能強化

Android 9 では、さまざまなセキュリティ機能が導入されています。 次のセクションでは、

Android Protected の確認

Android 9 以降を搭載したサポート対象のデバイスでは、Android Protected の確認を使用できます。このワークフローを使用すると、アプリでユーザーにプロンプトを表示し、短い文を承認するように求めることができます。この文により、アプリでは、ユーザーが支払いの実行などの機密性の高いトランザクションを完了する意思があることを再確認できます。

ユーザーがこの文を承認すると、Android Keystore は、鍵付きハッシュのメッセージ認証コード(HMAC)で保護されている暗号化署名を受け取って保存します。Android Keystore がメッセージの有効性を確認した後、アプリは、信頼できる実行環境(TEE)で trustedConfirmationRequired から生成された鍵を使用して、ユーザーが承認したメッセージに署名することができます。「 は、非常に高い信頼度でユーザーがそのメッセージを 内容に同意しました。

注意: Android Protected の確認は、ユーザーに対して安全な情報チャンネルを提供しません。アプリでは、 Android プラットフォームが提供するもの以外の機密性の保証。特に、このワークフローを使用して、ユーザーのデバイスに通常は表示しない機密情報を表示しないようにしてください。

Android Protected の確認のサポートを追加する方法については、 Android Protected 確認 ご覧ください

統合された生体認証ダイアログ

Android 9 では、アプリの代わりに、システムによってバイオメトリック認証ダイアログが提供されます。この機能により、ダイアログの外観、操作性、配置が標準化され、ユーザーは、信頼できるバイオメトリック認証情報チェッカーに対して、安心して認証を行うことができます。

アプリで FingerprintManager 指紋認証ダイアログをユーザーに表示するには、 BiometricPrompt してください。BiometricPrompt はシステムに依存して認証ダイアログを表示します。また、生体認証の種類に応じて動作を変化させます。 認証と認可を保持します。

ハードウェア セキュリティ モジュール

Android 9 以降を搭載したサポート対象デバイスは、 StrongBox Keymaster があります。これは、Keymaster HAL の実装です。 モジュール内にあります。このモジュールには次のものが含まれています。

  • 独自の CPU。
  • 安全なストレージ。
  • 真性乱数ジェネレータ。
  • パッケージの改ざんやアプリの不正なサイドローディングを防ぐ追加のメカニズム。

システムでは、StrongBox Keymaster に格納されている鍵をチェックするときに、信頼できる実行環境(TEE)で鍵の整合性を保証します。

Strongbox Keymaster の使用方法については、ハードウェア セキュリティをご覧ください。 モジュールをご覧ください。

キーストアへの鍵の安全なインポート

Android 9 では、ASN.1 でエンコードされた鍵形式を使用して、暗号化された鍵をキーストアに安全にインポートする機能を追加することにより、鍵を復号化する際の追加セキュリティを提供しています。次に、Keymaster によりキーストアで鍵が復号化されるため、デバイスのホストメモリに鍵のコンテンツがプレーン テキストで出現することはありません。

暗号化された鍵をインポートする方法の詳細 保護します

鍵のローテーションを使用した APK 署名スキーム

Android 9 では、APK 署名スキーム v3 のサポートが追加されています。このスキームには、各署名証明書の署名ブロックにローテーション証明記録を含めるためのオプションがあります。この機能により、アプリを新しい署名で署名できるようになります。 APK ファイルの過去の署名証明書を、 示されます。

詳しくは、apksigner を使用して鍵をローテーションする方法をご覧ください。

ロック解除されたデバイスでのみ鍵の復号を許可するオプション

Android 9 では unlockedDeviceRequired フラグが導入されています。このオプションにより、指定した鍵を使用して実行中のデータまたは保存されたデータの復号化を許可する前に、キーストアが画面のロック解除を要求するかどうかが指定されます。これらの型 の鍵は、Google Cloud Storage、BigQuery などの機密データを 収集できます。このフラグを使用すると、端末を紛失したり盗まれたりした場合でも、端末がロックされているとデータを復号化することはできないため、ユーザーには高い安心感がもたらされます。

デバイスがロックされているときに鍵を復号できないようにするには、このフラグを有効にします truesetUnlockedDeviceRequired() に渡します。 メソッドを呼び出します。この手順の完了後、ユーザーの画面がロックされていると、 その鍵を使用してデータを復号または署名しようとしても失敗します。ロックされたデバイスにアクセスするには、PIN、パスワード、指紋、またはその他の信頼できる要素が必要です。

従来の暗号化のサポート

Keymaster 4 を搭載した Android 9 デバイスは Triple Data をサポート 暗号化アルゴリズム(Triple DES)です。Triple DES を必要とする以前のシステムとアプリを相互運用する必要がある場合、機密性の高い認証情報を暗号化するときにこのタイプの暗号を使用します。

アプリのセキュリティを強化する方法について詳しくは、Android のセキュリティに関するページ デベロッパー

WPS のサポート終了

Wi-Fi Protected Setup(WPS)はセキュリティ上の理由によりサポートを終了しています。

Android のバックアップ

Android 9 では、Android 9.0 の新しい機能と、 簡単にアクセスできますこれらの変更点の詳細を以降のセクションで説明します。

クライアントサイド暗号化によるバックアップ

Android 9 では、クライアント側のシークレットを使った Android バックアップの暗号化がサポートされています。このサポートは、次の条件が満たされたときに自動的に有効化されます。

このプライバシー方針が有効化されると、ユーザーの端末で作成されたバックアップからデータを復元する際に、端末の PIN、パターン、またはパスワードが必要になります。学習内容 この機能を支えるテクノロジーの詳細については、Google Cloud Key Vault Service のホワイトペーパーをご覧ください。

バックアップに必要なデバイスの条件を定義する

アプリデータに機密情報や設定が含まれている場合、Android 9 ユーザーがデバイス名を バックアップがユーザーのバックアップに含まれている場合(たとえば、クライアント側の 暗号化が有効になっているか、ローカルのデバイス間で転送が行われている。

Android デバイスのデータのバックアップについて詳しくは、データ バックアップの概要をご覧ください。

ユーザー補助

Android 9 では、アプリのユーザーにさらに優れたエクスペリエンスを簡単に提供できるようにするユーザー補助機能フレームワークが強化されています。

ナビゲーション セマンティクス

Android 9 に追加された属性により、特にスクリーン リーダーなどのユーザー補助機能サービスが画面の一部から別の部分に移動する方法を簡単に定義できるようになりました。これらの属性を使用すると、視覚障がいを持つユーザーがアプリの UI のテキストをすばやく読んで選択できるようになります。

ショッピング アプリを例にとると、スクリーン リーダーは、あるお買い得品カテゴリから別のカテゴリへとユーザーを直接移動させることができます。その際、別のカテゴリに移動する前に、そのカテゴリに含まれるすべてのアイテムを読み取る必要はありません。

ユーザー補助ペインのタイトル

Android 8.1(API レベル 27)以前では、ユーザー補助サービスが常に アクティビティによってあるフラグメントが別のフラグメントに置き換えられた場合など、画面の特定のペインがいつ更新されたかを判別します。ペインの構成 論理的にグループ化され、視覚的に関連する UI 要素です。通常は、 あります。

Android 9 では、ユーザー補助ペインのタイトルを指定することも、個別に指定することもできます。 識別可能なタイトルを表示します。ペインにユーザー補助機能のペイン タイトルがある場合、ユーザー補助機能サービスは、ペインが変更されたときにより詳細な情報を受け取ります。この機能により、サービスはより詳細な情報をユーザーに提供できます。 主な変更点について説明します

ペインのタイトルを指定するには、 android:accessibilityPaneTitle 属性です。setAccessibilityPaneTitle() を使用して、実行時に置換される UI ペインのタイトルを更新することもできます。たとえば、コンテンツのコンテンツ領域にタイトルを Fragment オブジェクト。

見出しベースのナビゲーション

アプリに論理見出しを含むテキスト コンテンツを表示する場合は、 android:accessibilityHeading 属性を true に設定すると、 これらの見出しを表す View。これらの見出しを追加すると、ユーザー補助機能サービスでユーザーを 1 つの見出しから次の見出しに直接移動させることができます。すべてのユーザー補助機能サービスでこの機能を使用して、ユーザーの UI ナビゲーション エクスペリエンスを向上させることができます。

グループ ナビゲーションと出力

スクリーン リーダーは従来、 android:focusable 属性 読むべきタイミングを判断したり ViewGroup、または View オブジェクトを 1 つのユニットとしてまとめています。これにより、ユーザーは、ビューが相互に論理的に関連していることを理解できました。

Android 8.1 以前では、ViewGroup 内の各 View オブジェクトをフォーカス不可に、ViewGroup 自体をフォース可能に指定する必要があります。この が、一部の View インスタンスがフォーカス可能とマークされましたが、 キーボード操作が煩雑になりました。

Android 9 以降では、 android:screenReaderFocusable 属性を android:focusable 属性の代わりに使用できます。 View オブジェクトをフォーカス可能にすると、望ましくない結果が生じます。スクリーン リーダーは、android:screenReaderFocusable または android:focusabletrue に設定したすべての要素にフォーカスを当てます。

便利なアクション

Android 9 では、ユーザーの代わりに便利なアクションを実行するサポートが追加されています。

ツールチップの操作
ユーザー補助フレームワークの追加機能により、 アプリの UI のツールチップgetTooltipText() を使ってツールチップのテキストを読み取り、ACTION_SHOW_TOOLTIPACTION_HIDE_TOOLTIP を使って View のインスタンスにツールチップを表示または非表示にするよう指示します。
グローバル アクションを追加しました
Android 9 では、新たに 2 つのデバイス アクションが AccessibilityService クラスです。ユーザーがデバイスのロックやスクリーンショットの撮影を行えるようにする 使用 GLOBAL_ACTION_LOCK_SCREEN および GLOBAL_ACTION_TAKE_SCREENSHOT 定義できます。

ウィンドウ変更の詳細

Android 9 では、アプリが複数のウィンドウを同時に再描画した際に、アプリ ウィンドウの更新内容を容易にトラックできます。特定の TYPE_WINDOWS_CHANGED イベントが発生したら、 getWindowChanges() API を使用してウィンドウがどのように変更されたかを判断します。マルチウィンドウの更新中、各ウィンドウは 独自のイベントセットが生成されます。 getSource() メソッドは各イベントに関連付けられたウィンドウのルートビューを返します。

アプリのユーザー補助機能ペイン タイトルがアプリに定義されている場合、 View 個のオブジェクトがある場合、サービスは アプリの UI が更新されたとき。TYPE_WINDOW_STATE_CHANGED イベントが発生したとき、getContentChangeTypes() が返すタイプを使って、ウィンドウがどのように変わったかを判断します。このフレームワークでは、たとえば、ペインのタイトルが新しくなったときや、ペインが消えたときを検出できます。

回転

画面が意図せず回転するのを避けるため、端末の位置が変化しても、現在の画面の向きを固定するモードが導入されました。ユーザーはローテーションをトリガーできる 手動で入力することもできます。

ほとんどの場合、アプリの互換性への影響は最小限です。ただし、 回転動作がカスタマイズされている、または通常とは異なる画面の向きが使用されている 設定すると、以前は気づかなかったような問題が発生することがあります。 ユーザーの回転設定が常に縦向きに設定されていました。ぜひ アプリのすべての主要なアクティビティで回転動作を確認して、 画面の向きの設定がすべて 最適なエクスペリエンスの提供に尽力します

詳しくは、このモジュールで紹介する関連動作 変更します

回転するモバイル。ユーザーが手動で回転をトリガーできる新しい回転モードが表示されています

新しい回転モードでは、ユーザーが必要に応じてシステムバーのボタンから手動で画面の向きを変更可能

テキスト

Android 9 では、テキスト関連の以下の機能が プラットフォーム:

  • 事前計算されたテキスト: PrecomputedText クラスの改善 必要なテキスト レンダリングのパフォーマンスを 事前に確認しておくことが大切です。また、アプリがオフになっているときにテキスト レイアウトを実行できるようになります。 呼び出します。

  • 拡大鏡: Magnifier クラスは、 拡大鏡 API を備えたプラットフォーム ウィジェットで、 すべてのアプリで拡大鏡機能を使用できます。

  • Smart Linkify: Android 9 では、TextClassifier クラスが強化されています。このクラスは、機械学習を活用して、選択したテキストのいくつかのエンティティを特定したり、アクションを提案したりします。たとえば、TextClassifier を使用すると、ユーザーが電話番号を選択したことをアプリで検出できます。アプリはその後、 ユーザーがその番号を使用して電話をかけます。TextClassifier の機能は、Linkify クラスの機能に代わるものです。

  • テキスト レイアウト: いくつかの便利なメソッドと属性を使用して、 実装する方法を学びました詳細については、TextView のリファレンス ドキュメントをご覧ください。

ART での DEX ファイルの Ahead-of-time 変換

Android 9 以降を実行するデバイスでは、Android ランタイム(ART)の Ahead-Of-Time コンパイラでアプリ パッケージの DEX ファイルをよりコンパクトな表現に変換することにより、圧縮された Dalvik 実行形式(DEX)ファイルがさらに最適化されます。この変更により、アプリの起動を高速化し、ディスク スペースと RAM の消費を抑えることができます。

この改善は、ディスク I/O が遅いローエンド デバイスに特にメリットをもたらします。 向上します

オンデバイス システム トレース

Android 9 では、デバイスからシステム トレースを記録できます。 その後、これらの録画のレポートを開発チームと共有します。このレポートは、HTML などの複数の形式をサポートしています。

これらのトレースを収集することで、アプリのパフォーマンスに関連する プロセスとスレッドを表示し、グローバルに重要な他の種類のデバイスの 構成されます。

このツールの詳細については、オンデバイス システム トレースの実行をご覧ください。