大型画面向けの新機能、12L が来年早々にリリースされます。今すぐお試しください。

機能と API の概要

Android 12 では、デベロッパー向けに優れた新しい機能と API が導入されました。下記のセクションで、アプリの機能を確認し、関連する API を試すことができます。

新しい API、変更された API、削除された API の一覧については、API 差分レポートをご覧ください。新しい API について詳しくは、Android API リファレンスをご覧ください。新しい API は、見つけやすいようにハイライト表示されています。また、プラットフォームの変更がアプリに影響する領域については、Android 12 の動作変更(Android 12 をターゲットとするアプリの場合とすべてのアプリの場合)をご確認ください。

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

Material You

Android 12 では Material You と呼ばれる新しいデザイン言語が導入され、高度にカスタマイズされた美しいアプリを作成できるようになりました。最新のマテリアル デザイン 3 の更新をすべてアプリに導入するには、マテリアル デザイン コンポーネントのアルファ版をお試しください。

Material You

ウィジェットの改善

Android 12 では既存の Widgets API が改善され、プラットフォームやランチャーにおけるユーザーとデベロッパーのエクスペリエンスが向上しています。ウィジェットを Android 12 に対応させ、新機能で更新するためのガイドを作成しました。

詳しくは、Android 12 におけるウィジェットの改善をご覧ください。

リッチ コンテンツの挿入

Android 12 では、使用可能な任意のソース(クリップボード、キーボード、ドラッグ&ドロップ)からアプリがリッチ コンテンツを受け取れる、新しい Unified API が導入されました。

詳しくは、リッチ コンテンツの受信をご覧ください。

アプリのスプラッシュ画面 API

Android 12 では、起動時のアプリ行きの動き、アプリアイコンを表示するスプラッシュ画面、アプリ本体への移行など、すべてのアプリに新しいアプリ起動アニメーションが導入されました。詳しくは、スプラッシュ画面デベロッパー ガイドをご覧ください。

角丸 API

Android 12 では、角丸の半径と中心点を指定する RoundedCornerWindowInsets.getRoundedCorner(int position) が導入されました。

詳しくは、角丸をご覧ください。

豊かな触覚エクスペリエンス

Android 12 では、UI イベントのための有益な触覚フィードバック、ゲームへの没入感と楽しさを生み出す効果、生産性向上に役立つ注意喚起触覚などのためのツールが強化されました。

アクチュエータ効果

Android 12 では、最新のアクチュエータの広範な周波数帯域幅を利用するローティックなどの表現力効果が追加されています。ゲーム デベロッパーは、ゲーム コントローラで複数の異なるアクチュエータに個別にアクセスし、複数のアクチュエータに対して同じ効果を同期させて、または異なる触覚効果を配信できるようになりました。デベロッパーでは、リッチな触覚効果の構成要素として、定数プリミティブを使用することをおすすめします。定数は UI イベントの強化に使用し、触覚コンポーザーはプリミティブを連続させてさらに複雑な効果を実現できます。これらの API は Pixel 4 デバイスで試すことができます。エコシステム全体でユーザーに最新の触覚サポートを提供できるよう、Google はパートナーのデバイス メーカーと引き続き協力していきます。

音声と組み合わせた触覚効果

Android 12 アプリは、スマートフォンのバイブレーションを使用して、オーディオ セッションから得られる触覚フィードバックを生成できます。これは、ゲームとオーディオのエクスペリエンスの没入感を高めるのに役立ちます。たとえば、触覚で強化した着信音を使って発信者を特定したり、自動車操縦ゲームで荒れ地を走る感触をシミュレートしたりすることができます。

詳しくは、HapticGenerator リファレンス ドキュメントをご覧ください。

AppSearch

Android 12 では、高性能のオンデバイス検索エンジンである AppSearch がシステム サービスとして導入されています。AppSearch を使用すると、アプリが構造化データをインデックスに登録して、組み込みの全文検索機能を使用して検索できます。さらに AppSearch は、効率性に優れたインデックス登録および検索、複数言語のサポート、関連性ランキングなど、ネイティブの検索機能もサポートしています。

AppSearch 内でのインデックス登録と検索の図

AppSearch には、古いバージョンの Android と互換性のあるアプリ用のローカル インデックスと、Android 12 のシステム全体で管理される中央インデックスがあります。中央インデックスを使用すると、プリインストールされているインテリジェンス コンポーネントによって、システムの UI サーフェスにデータを表示できます。システムの UI サーフェスに正確にどのデータが表示されるかは、OEM によって異なります。また、他のアプリとデータを安全に共有して、同じデータを検索できるようにすることも可能です。

AppSearch について詳しくは、デベロッパー ガイドをご覧ください。また、AppSearch Jetpack ライブラリでは、デベロッパー向けの API サーフェスやアノテーション プロセッサも提供されています。

ゲームモード

Game Mode APIゲームモード介入は、ユーザー設定やゲーム固有の構成に基づいてパフォーマンスやバッテリー寿命などの特性に優先順位を付けることで、ゲームプレイの最適化を可能にします。

詳しくは、ゲームモードをご覧ください。

ピクチャー イン ピクチャー(PIP)の改善

Android 12 では、PIP モードに以下の新機能が導入されています。

  • ジェスチャー ナビゲーションで PIP モードにスムーズに遷移するための新しい API フラグ

    setAutoEnterEnabled フラグを使用すると、ジェスチャー ナビゲーション モードで上にスワイプしてホーム画面に戻る際の、PIP モードへの遷移をスムーズにできます。以前は、下から上にスワイプしてホーム画面に戻るアニメーションが終了するのを待ってから、PIP ウィンドウにフェードインしていました。

  • 動画以外のコンテンツのシームレスなサイズ変更を無効にする新しい API フラグ

    SeamlessResizeEnabled フラグにより、PIP ウィンドウで動画以外のコンテンツのサイズを変更する際に、よりスムーズなクロスフェード アニメーションを提供できるようになりました。以前は、PIP ウィンドウで動画以外のコンテンツのサイズを変更すると、ユーザーに不快感を与える視覚的アーティファクトが発生していました。

  • PIP モードの終了時のスムーズなアニメーション

    SourceRectHint フラグを再利用して、PIP モードの終了時のスムーズなアニメーションを実装できます。PIP モードの終了時に、その時点で使用可能な sourceRectHint を使用してアニメーションが作成されます(PIP に入るために使用された元の Rect であるか、アプリが提供する更新された Rect であるかは問いません)。

  • 新しいジェスチャーのサポート

    Android 12 では、PIP ウィンドウでのジェスチャーとして、退避とピンチ操作によるズームがサポートされるようになりました。

    • ウィンドウを退避するには、ウィンドウを左端または右端にドラッグします。ウィンドウの退避を解除するには、退避中のウィンドウの表示されている部分をタップするか、ドラッグして引き出します。

    • ピンチ操作によるズームで PIP ウィンドウのサイズを変更できるようになりました。

Android 12 以上をターゲットとするアプリに対する新しい動作の影響について詳しくは、ピクチャー イン ピクチャーの動作の改善をご覧ください。この機能の実装手順については、ピクチャー イン ピクチャーのサポートをご覧ください。

着信の重要度をランク付けできる新しい着信通知

Android 12 では、通話用の新しい通知スタイル Notification.CallStyle が追加されました。このテンプレートを使用して、ステータスバーに通話時間を示す視認性の高いチップを表示することで、アクティブな通話の重要度を示すことができます。このチップをタップすると通話に戻ります。

着信と進行中の通話がユーザーにとって最も重要であるため、こうした通知はシェード内で最上位にランクされます。このランキングにより、システムがこうした優先度の高い通話を他のデバイスに転送することもできます。

すべての種類の通話に対し、次のコードを実装します。

Kotlin

// Create a new call with the user as caller.
val incoming_caller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Java

// Create a new call with the user as caller.
Person incoming_caller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

forIncomingCall() を使用して、着信の通話スタイル通知を作成します。

Kotlin

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller)

Java

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller);

forOngoingCall() を使用して、進行中の通話の通話スタイル通知を作成します。

Kotlin

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Java

// Create a call style notification for an ongoing call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller);

forScreeningCall() を使用して、通話をスクリーニングするための通話スタイル通知を作成します。

Kotlin

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

Java

Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

通知の画像サポートの拡充

Android 12 では、MessagingStyle() 通知と BigPictureStyle() 通知にアニメーション画像を表示することで、アプリの通知エクスペリエンスが拡充されました。また、ユーザーが通知シェードからメッセージに返信する際、画像メッセージを送信できるようになりました。

ジェスチャー ナビゲーションの没入モードの改善

Android 12 では既存の動作が統合され、ユーザーが没入モード時にジェスチャー ナビゲーション コマンドを実行しやすくなりました。さらに、Android 12 ではスティッキー没入モードの下位互換性が確保されています。

最近アクセスした URL の共有(Pixel のみ)

Pixel デバイスで、最近表示したウェブ コンテンツへのリンクを [最近] 画面から直接共有できるようになりました。ユーザーはアプリ内のコンテンツにアクセスした後で [最近] 画面をスワイプして、コンテンツを表示したアプリを見つけ、リンクボタンをタップして URL をコピーまたは共有できます。

詳しくは、最近使用した URL の共有を有効にするをご覧ください。

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

プライバシー ダッシュボード

縦のタイムラインに、位置情報にアクセスしたさまざまなアプリと、そのアクセスが発生した時刻が表示されます
図 1. プライバシー ダッシュボードの一部である位置情報使用状況画面。

Android 12 以降を搭載するサポート対象デバイスでは、システム設定にプライバシー ダッシュボードの画面が表示されます。この画面では、ユーザーは位置情報、カメラ、マイクの情報にアプリがいつアクセスしたのかが表示される個別画面にアクセスできます。各画面には、さまざまなアプリが特定の種類のデータにいつアクセスしたのかを示すタイムラインが表示されます。図 1 に、位置情報のデータアクセス タイムラインを示します。

アプリは、位置情報、カメラ、マイクの情報にアクセスする理由をユーザーが理解できるよう、根拠を示すことができます。この根拠は、新しいプライバシー ダッシュボード画面、アプリの権限画面、またはそれらの両方に表示できます。

Bluetooth の権限

Android 12 では、BLUETOOTH_SCANBLUETOOTH_ADVERTISEBLUETOOTH_CONNECT 権限が導入されました。この権限により、Android 12 をターゲットとするアプリ、特にデバイスの位置情報へのアクセスを必要としないアプリで、Bluetooth デバイスの操作が容易になります。

アプリの Bluetooth 権限の申告を更新する

Android 12 以上をターゲットとするようにデバイスを準備するには、アプリのロジックを更新します。従来の Bluetooth 権限のセットを宣言するのではなく、最新の Bluetooth 権限セットを宣言します。

権限グループの検索

Android 12 以降では、プラットフォームが提供する権限がシステムでどのように編成されているかをクエリできます。

  • プラットフォームで定義された権限が割り当てられた権限グループを確認するには、getGroupOfPlatformPermission() を呼び出します。
  • 特定の権限グループに割り当てられたプラットフォーム定義の権限を確認するには、getPlatformPermissionsForGroup() を呼び出します。

アプリ オーバーレイ ウィンドウを非表示にする

ユーザーがデベロッパーのアプリを操作したときに表示される内容をデベロッパーが細かく制御できるように、Android 12 では、SYSTEM_ALERT_WINDOW 権限のあるアプリが描画するオーバーレイ ウィンドウを非表示にする機能が導入されました。

HIDE_OVERLAY_WINDOWS 権限を宣言した後、アプリは setHideOverlayWindows() を呼び出して、アプリ自体のウィンドウが表示されているときに TYPE_APPLICATION_OVERLAY 型のウィンドウをすべて非表示にするよう示すことができます。アプリはこの処理を、トランザクション確認フローなどのプライベートな画面を表示する際に行えます。

TYPE_APPLICATION_OVERLAY 型のウィンドウを表示するアプリは、ピクチャー イン ピクチャーバブルなど、ユースケースに適した代替手段を検討する必要があります。

既知の署名者権限保護フラグ

Android 12 以降、署名レベルの権限knownCerts 属性を使用すると、宣言の際に既知の署名証明書のダイジェストを参照できます。

アプリがこの属性を宣言すると、knownSigner フラグを使用して、デバイスとアプリが他のアプリに署名権限を付与できるようになります。デバイスの製造と出荷の際にアプリに署名する必要はありません。

デバイス プロパティの証明

Android 12 では、アプリが新しい鍵を生成したときにアテステーション証明書内のデバイス プロパティを検証できるアプリのセットが拡張されました。

Android 9(API レベル 28)以降、Keymaster 4.0 以上を使用するデバイス ポリシー オーナー(DPO)は、アテステーション証明書内のデバイス プロパティを検証できます。Android 12(API レベル 31)以降は、Android 12 をターゲットとするすべてのアプリで、setDevicePropertiesAttestationIncluded() メソッドを使用してこの検証を実行できます。

生成されるデバイス プロパティには、次の Build フィールドが含まれています。

  • BRAND
  • DEVICE
  • MANUFACTURER
  • MODEL
  • PRODUCT

ロック画面での通知アクションの保護

Android 12 以降、Notification.Action.Builder クラスでは setAuthenticationRequired() メソッドがサポートされています。それにより、アプリから特定の通知アクションを呼び出す前に、デバイスのロック解除を要求できます。このメソッドにより、ロックされたデバイスにおける通知のセキュリティを強化できます。

BiometricPrompt のローカライズ可能な文字列

Android 12 では、アプリの生体認証ユーザー エクスペリエンスを向上させる新しい API が導入されています。新しい BiometricManager.Strings ネストクラスには、getButtonLabel()getPromptMessage()getSettingName() メソッドが含まれています。これらのメソッドをアプリに使用すると、ユーザーが判読できる、ローカライズされたボタンラベル、プロンプト メッセージ、アプリ設定名が取得されます。これらのラベルを使用すれば、「顔認証を使用する」や「指紋を使用して続行する」など、生体認証方法に応じた詳細なユーザー手順を作成できます。

メッセージ アプリのフィッシング検出(Pixel のみ)

不審なメッセージが検出されると、ユーザーにこのようなメッセージが表示されます。

サポートされている Pixel デバイスで、Android 12 が一般的なメッセージ アプリで受信したメッセージに対してフィッシング検出を行います。ユーザーがこの機能を有効にすると、システムがオンデバイスの機械学習を使用して不審なアクティビティを検出します。検出された場合は、メッセージ アプリの UI の上部に安全オーバーレイが表示され、ユーザーに警告します。たとえば、フィッシングの検出によって、次のような潜在的なリスクをユーザーに警告できます。

  • コードの送信や送金などの不審なリクエスト
  • 疑わしい URL
  • 悪意のある添付ファイル
  • 悪意のあるアプリへのリンク

オーバーレイを使用すれば、ユーザーに警告するだけでなく、不審なメッセージの報告や、システムから出された警告に関するフィードバックをユーザーに促すことができます。

デベロッパーは、アプリ マニフェスト ファイルに文字列 com.google.android.ALLOW_PHISHING_DETECTION を含むメタデータタグを新しく追加することで、この機能をオプトアウトできます。以下に例を示します。

<manifest>
    <application android:name="com.messagingapp">
        <meta-data android:name="com.google.android.as.ALLOW_PHISHING_DETECTION" android:value="false" />

    </application>
</manifest>

メディア

互換性のあるメディアのコード変換

Android 12(API レベル 31)以降では、デバイス上で記録された HEVC(H.265)および HDR(HDR10 および HDR10+)の動画を、幅広い標準的なプレーヤーに対応している AVC(H.264)形式に自動的にコード変換できます。これにより、古いアプリとの互換性を犠牲にすることなく、利用可能な最新のコーデックを活用できます。

詳しくは、互換性のあるメディアのコード変換をご覧ください。

パフォーマンス クラス

Android 12 では、パフォーマンス クラスという標準が導入されています。パフォーマンス クラスは、Android の基本要件を超えるハードウェア機能を指定します。各 Android デバイスは、サポート対象のパフォーマンス クラスを宣言します。デベロッパーは実行時にデバイスのパフォーマンス クラスをチェックし、デバイスの機能を最大限に活用するアップグレード環境を提供できます。

詳細については、パフォーマンス クラスをご覧ください。

動画エンコードの改善

Android 12 では、動画エンコードの量子化パラメータ(QP)値を制御する標準のキーセットが定義されています。これにより、デベロッパーはベンダー固有のコードを回避できます。

新しいキーは、MediaFormat API と NDK Media ライブラリで利用できます。

Android 12 以降の動画エンコーダでは、最低品質しきい値が適用されます。これにより、シーンの複雑性が高い動画をエンコードする場合に極端な品質低下が生じなくなります。

音声フォーカス

Android 12(API レベル 31)では、アプリが音声フォーカスをリクエストしたときに、再生中の別のアプリにフォーカスがあった場合、再生中のアプリがフェードアウトします。

詳しくは、Android 12 以降での音声フォーカスをご覧ください。

MediaDrm の更新

現在の MediaDrm API にセキュアなデコーダ コンポーネントが必要かどうかを判断するには、次の手順を行う必要があります。

  1. MediaDrm を作成します。
  2. セッションを開いてセッション ID を取得します。
  3. セッション ID を使用して MediaCrypto を作成します。
  4. MediaCrypto.requiresSecureDecoderComponent(mimeType) を呼び出します。

新しいメソッド requiresSecureDecoder(@NonNull String mime)requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level) を使用すると、MediaDrm を作成した直後にこれを判断できます。

カメラ

Camera2 ベンダー拡張

Google のパートナーであるデバイス メーカーの多くは、ボケ効果、HDR、夜間モードなど、アプリでのエクスペリエンスをカスタマイズするためのカメラ効果をデバイスに搭載しています。CameraX ライブラリには、こうしたカスタム効果に対応するベンダー拡張機能のセットが用意されています。Android 12 では、このようなベンダー拡張機能がプラットフォームに直接公開されています。

そのため、複雑な Camera2 実装を使用するアプリでも、従来のコードに大幅な変更を加えることなく、拡張機能を利用できるようになっています。Camera2 拡張機能 API では、CameraX とまったく同じ効果が公開されており、それらはさまざまなデバイスですでにサポートされているため、追加の設定なしで各種の効果を使用できます。

詳細については、CameraExtensionCharacteristics をご覧ください。

Quad Bayer カメラセンサーのサポート

現在、Quad または Nona Bayer パターンに代表される超高解像度カメラセンサーが多くの Android デバイスに搭載されており、画質と低照度性能の面で高い柔軟性を備えています。Android 12 では、サードパーティ アプリがこうした汎用センサーを最大限に活用できるよう、新しいプラットフォーム API が導入されました。新しい API は、こうしたセンサーの固有の動作をサポートし、フル解像度または「最大解像度」モードと「デフォルト」モードで動作するときに、異なるストリーム構成や組み合わせをサポートする可能性があることを考慮に入れています。

グラフィックと画像

アプリが tombstone トレースに直接アクセスできるようにする

Android 12 以降では、ApplicationExitInfo.getTraceInputStream() メソッドを介して、プロトコル バッファとしてアプリのネイティブ クラッシュ tombstone にアクセスできます。プロトコル バッファは、こちらのスキーマを使用してシリアル化されます。これまでは、Android Debug Bridge(adb)でしかこの情報にアクセスできませんでした。

詳しくは、アプリが Tombstone トレースに直接アクセスできるようにするをご覧ください。

AVIF 画像のサポート

Android 12 では、AV1 画像ファイル形式(AVIF)を使用する画像のサポートが導入されました。AVIF は、AV1 でエンコードされた画像と画像シーケンス用のコンテナ形式です。AVIF は動画圧縮からのフレーム内エンコード済みコンテンツを活用します。これにより、JPEG などの古い画像形式と比べて、同じファイルサイズでの画質が大幅に向上します。この形式のメリットについては、Jake Archibald のブログ投稿で詳しく説明されています。

簡単になったぼかし、カラーフィルタ、その他の効果

Android 12 では、ぼかし、カラーフィルタ、Android シェーダー効果などの一般的なグラフィック効果を View やレンダリング階層に適用する、新しい RenderEffect が追加されました。効果は、チェーン効果(内部効果と外部効果)またはブレンド効果として組み合わせることができます。Android デバイスによっては処理能力が限られているため、この機能がサポートされている場合もあれば、サポートされていない場合もあります。

View.setRenderEffect(RenderEffect) を呼び出すことで、View の基になる RenderNode に効果を適用することもできます。

RenderEffect を実装するには:

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))

ネイティブ アニメーション画像のデコード

Android 12 では、NDK ImageDecoder API が拡張され、アニメーション GIF とアニメーション WebP のファイル形式を使用する画像から、すべてのフレームとタイミング データをデコードできるようになりました。この API が Android 11 で導入されたときは、これらの形式のアニメーションに含まれる最初の画像のみをデコードしていました。

サードパーティ ライブラリの代わりに ImageDecoder を使用すると、さらに APK サイズを縮小できます。また、セキュリティとパフォーマンスに関連する今後のアップデートを利用できます。

この API について詳しくは、API リファレンスGitHub のサンプルをご覧ください。

接続

コンパニオン アプリを起動したままにする

Android 12 では、デバイスを管理するためにコンパニオン アプリを実行し続けることができるように、次のような API が導入されました。

  • コンパニオン デバイスが範囲内にある場合にアプリを復帰させられるようにする。
  • デバイスが範囲内にある間、プロセスが動作し続けることを保証する。

API を使用するには、コンパニオン デバイス マネージャーを使用してデバイスを接続する必要があります。詳細については、CompanionDeviceManager.startObservingDevicePresence()CompanionDeviceService.onDeviceAppeared() をご覧ください。

コンパニオン デバイス マネージャーのプロファイル

コンパニオン デバイス プロファイルを使用して 1 つのリクエストで複数の権限をリクエストする権限ダイアログ。

Android 12(API レベル 31)以上に搭載されたパートナー アプリは、スマートウォッチに接続する際にコンパニオン デバイス プロファイルを使用できます。プロファイルを使用すると、デバイスタイプ固有の権限の付与を 1 つのステップにまとめることで、登録プロセスを簡素化できます。

まとめた権限は、デバイスが接続されるとコンパニオン アプリに付与され、デバイスが関連付けられている間に限り有効です。アプリを削除するか関連付けを削除すると、権限が削除されます。

詳細については、AssociationRequest.Builder.setDeviceProfile() をご覧ください。

帯域幅推定の改善

Android 12 では、getLinkDownstreamBandwidthKbps()getLinkUpstreamBandwidthKbps() で提供される帯域幅推定機能が、Wi-Fi とモバイル接続の両方で改善されました。返される値が、デバイス上のすべてのアプリについて、携帯通信会社または Wi-Fi の SSID、ネットワークの種類、信号レベル別の、全期間の加重平均スループットを表すようになりました。これにより、返される予想スループットの推定値がさらに正確かつ現実的になり、アプリのコールド スタート時に推定値を提供でき、他のスループット推定方法を使用する場合に比べて少ないサイクルで済みます。

Wi-Fi Aware(NAN)の機能強化

Android 12 では、Wi-Fi Aware で次の機能強化が行われました。

  • Android 12(API レベル 31)以上を搭載したデバイスでは、サービスの中断や圏外への移動が原因でアプリが検出済みのサービスを喪失したときに、onServiceLost() コールバックを使用してアラートを受け取ることができます。
  • 複数のデータパス(NAN データパス)を設定する方法は、より効率化されています。以前のバージョンでは L2 メッセージを使用してイニシエータのピア情報を交換していたため、レイテンシが発生していました。Android 12 以上を搭載したデバイスでは、応答側(サーバー)がピアを承認するように構成できます。つまり、イニシエータ情報を事前に認識する必要がありません。これにより、データパスの確立が高速化され、1 つのネットワーク リクエストのみで複数のポイントツーポイント リンクが有効になります。
  • Android 12 以上を搭載したデバイスでは、リソース不足を理由にフレームワークが検出リクエストまたは接続リクエストを拒否することを防ぐため、WifiAwareManager.getAvailableAwareResources() を呼び出せるようになりました。このメソッドの戻り値から、使用可能なデータパスの数、使用可能なパブリッシュ セッションの数、使用可能なサブスクライブ セッションの数を取得できます。

ピアツーピア接続とインターネット接続の同時実行

Android 12(API レベル 31)以上をターゲットとするデバイスがハードウェア サポート対象のデバイス上で実行されている場合、ピアツーピア接続を使用しても、ピアデバイスへの接続を作成する際に既存の Wi-Fi 接続は切断されません。この機能のサポートを確認するには、WifiManager.isMultiStaConcurrencySupported() を使用します。

NFC 決済での画面オフを有効にする

Android 12 以降をターゲットとするアプリでは、requireDeviceScreenOnfalse に設定することで、デバイスの画面をオンにすることなく NFC 決済を有効にできます。画面がオフまたはロック時の NFC 決済の詳細については、画面オフとロック画面の動作をご覧ください。

ストレージ

Android 12 では、次のストレージ管理機能が導入されています。

コア機能

アプリの自動アップデート

Android 12 では、PackageInstaller API を使用するアプリ向けに setRequireUserAction() メソッドが導入されました。このメソッドにより、ユーザーにアクションの確認を求めることなく、インストーラ アプリがアプリのアップデートを実施できます。

デバイスのチップセットに関する情報

Android 12 では、SoC チップセットのベンダー情報とモデル情報を SDK 経由で公開する 2 つの定数が android.os.Build に追加されました。それぞれ Build.SOC_MANUFACTURERBuild.SOC_MODEL を呼び出すことで、この情報を取得できます。

Core Java API の更新

デベロッパーの皆様によるご要望とご協力に基づいて、Android 12 では以下のコアライブラリが追加されています。

クラス API
java.lang.Deprecated
java.lang.Byte
java.lang.Short
java.lang.Math
java.lang.StrictMath
java.util.Set copyOf()
java.util.Map copyOf()
java.util.List copyOf()
java.time.Duration
java.time.LocalTime