Android 12 では、デベロッパー向けに優れた新しい機能と API が導入されました。下記のセクションで、アプリの機能を確認し、関連する API を試すことができます。
新しい API、変更された API、削除された API の一覧については、API 差分レポートをご覧ください。新しい API について詳しくは、Android API リファレンスをご覧ください。新しい API は、見つけやすいようにハイライト表示されています。また、プラットフォームの変更がアプリに影響する領域については、Android 12 の動作変更(Android 12 をターゲットとするアプリの場合とすべてのアプリの場合)をご確認ください。
ユーザー エクスペリエンス
Material You
Android 12 では Material You と呼ばれる新しいデザイン言語が導入され、高度にカスタマイズされた美しいアプリを作成できるようになりました。最新のマテリアル デザイン 3 の更新をすべてアプリに導入するには、マテリアル デザイン コンポーネントのアルファ版をお試しください。
ウィジェットの改善
Android 12 では既存の Widgets API が改善され、プラットフォームやランチャーにおけるユーザーとデベロッパーのエクスペリエンスが向上しています。ウィジェットを Android 12 に対応させ、新機能で更新するためのガイドを作成しました。
詳しくは、Android 12 におけるウィジェットの改善をご覧ください。
リッチ コンテンツの挿入
Android 12 では、使用可能な任意のソース(クリップボード、キーボード、ドラッグ&ドロップ)からアプリがリッチ コンテンツを受け取れる、新しい Unified API が導入されました。
詳しくは、リッチ コンテンツの受信をご覧ください。
アプリのスプラッシュ画面 API
Android 12 では、起動時のアプリ行きの動き、アプリアイコンを表示するスプラッシュ画面、アプリ本体への移行など、すべてのアプリに新しいアプリ起動アニメーションが導入されました。詳しくは、スプラッシュ画面デベロッパー ガイドをご覧ください。
角丸 API
Android 12 では、角丸の半径と中心点を指定する RoundedCorner
と WindowInsets.getRoundedCorner(int
position)
が導入されました。
詳しくは、角丸をご覧ください。
豊かな触覚エクスペリエンス
Android 12 では、UI イベントのための有益な触覚フィードバック、ゲームへの没入感と楽しさを生み出す効果、生産性向上に役立つ注意喚起触覚などのためのツールが強化されました。
アクチュエータ効果
Android 12 では、最新のアクチュエータの広範な周波数帯域幅を利用するローティックなどの表現力効果が追加されています。ゲーム デベロッパーは、ゲーム コントローラで複数の異なるアクチュエータに個別にアクセスし、複数のアクチュエータに対して同じ効果を同期させて、または異なる触覚効果を配信できるようになりました。デベロッパーでは、リッチな触覚効果の構成要素として、定数とプリミティブを使用することをおすすめします。定数は UI イベントの強化に使用し、触覚コンポーザーはプリミティブを連続させてさらに複雑な効果を実現できます。これらの API は Pixel 4 デバイスで試すことができます。エコシステム全体でユーザーに最新の触覚サポートを提供できるよう、Google はパートナーのデバイス メーカーと引き続き協力していきます。
音声と組み合わせた触覚効果
Android 12 アプリは、スマートフォンのバイブレーションを使用して、オーディオ セッションから得られる触覚フィードバックを生成できます。これは、ゲームとオーディオのエクスペリエンスの没入感を高めるのに役立ちます。たとえば、触覚で強化した着信音を使って発信者を特定したり、自動車操縦ゲームで荒れ地を走る感触をシミュレートしたりすることができます。
詳しくは、HapticGenerator
リファレンス ドキュメントをご覧ください。
AppSearch
Android 12 では、高性能のオンデバイス検索エンジンである AppSearch がシステム サービスとして導入されています。AppSearch を使用すると、アプリが構造化データをインデックスに登録して、組み込みの全文検索機能を使用して検索できます。さらに AppSearch は、効率性に優れたインデックス登録および検索、複数言語のサポート、関連性ランキングなど、ネイティブの検索機能もサポートしています。
AppSearch には、古いバージョンの Android と互換性のあるアプリ用のローカル インデックスと、Android 12 のシステム全体で管理される中央インデックスがあります。中央インデックスを使用すると、プリインストールされているインテリジェンス コンポーネントによって、システムの UI サーフェスにデータを表示できます。システムの UI サーフェスに正確にどのデータが表示されるかは、OEM によって異なります。また、他のアプリとデータを安全に共有して、同じデータを検索できるようにすることも可能です。
AppSearch について詳しくは、デベロッパー ガイドをご覧ください。また、AppSearch Jetpack ライブラリでは、デベロッパー向けの API サーフェスやアノテーション プロセッサも提供されています。
ゲームモード
Game Mode API とゲームモード介入は、ユーザー設定やゲーム固有の構成に基づいてパフォーマンスやバッテリー寿命などの特性に優先順位を付けることで、ゲームプレイの最適化を可能にします。
詳しくは、ゲームモードをご覧ください。
ピクチャー イン ピクチャー(PIP)のおすすめと改善
Android 12 では、PIP モードの以下の点が改善されています。
新しい PiP ジェスチャーのサポート
Android 12 では、PIP ウィンドウでの退避とピンチ操作によるズームがサポートされるようになりました。
ウィンドウを退避するには、ウィンドウを左端または右端にドラッグします。ウィンドウの退避を解除するには、退避中のウィンドウの表示されている部分をタップするか、ドラッグして引き出します。
ピンチ操作によるズームで PIP ウィンドウのサイズを変更できるようになりました。
洗練された PiP 遷移エクスペリエンスをサポートするおすすめの新機能
Android 12 では、全画面表示ウィンドウと PiP ウィンドウ間のアニメーションによる遷移に大幅な外観上の改善が加えられました。該当する変更をすべて実装することを強くおすすめします。実装すると、追加の作業なしで、これらの変更が折りたたみ式デバイスやタブレットなどの大画面に自動的にスケーリングされます。
これらの機能は次のとおりです。
ジェスチャー ナビゲーションによる PIP モードへのスムーズな遷移を可能にする新しい API フラグ
setAutoEnterEnabled
フラグを使用すると、ジェスチャー ナビゲーション モードで上にスワイプしてホーム画面に戻る際の、PIP モードへの遷移をスムーズにできます。以前は、下から上にスワイプしてホーム画面に戻るアニメーションが終了するのを待ってから、PIP ウィンドウにフェードインしていました。-
SourceRectHint
フラグを再利用して、PIP モードの開始と終了時のスムーズなアニメーションを実装できるようになりました。 動画以外のコンテンツのシームレスなサイズ変更を無効にする新しい API フラグ
SeamlessResizeEnabled
フラグにより、PIP ウィンドウで動画以外のコンテンツのサイズを変更する際に、よりスムーズなクロスフェード アニメーションを提供できるようになりました。以前は、PIP ウィンドウで動画以外のコンテンツのサイズを変更すると、ユーザーに不快感を与える視覚的アーティファクトが発生していました。
着信の重要度をランク付けできる新しい着信通知
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 の共有を有効にするをご覧ください。
セキュリティとプライバシー
プライバシー ダッシュボード
Android 12 以降を搭載するサポート対象デバイスでは、システム設定にプライバシー ダッシュボードの画面が表示されます。この画面では、ユーザーは位置情報、カメラ、マイクの情報にアプリがいつアクセスしたのかが表示される個別画面にアクセスできます。各画面には、さまざまなアプリが特定の種類のデータにいつアクセスしたのかを示すタイムラインが表示されます。図 1 に、位置情報のデータアクセス タイムラインを示します。
アプリは、位置情報、カメラ、マイクの情報にアクセスする理由をユーザーが理解できるよう、根拠を示すことができます。この根拠は、新しいプライバシー ダッシュボード画面、アプリの権限画面、またはそれらの両方に表示できます。
Bluetooth の権限
Android 12 では、BLUETOOTH_SCAN
、BLUETOOTH_ADVERTISE
、BLUETOOTH_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.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 にセキュアなデコーダ コンポーネントが必要かどうかを判断するには、次の手順を行う必要があります。
MediaDrm
を作成します。- セッションを開いてセッション ID を取得します。
- セッション ID を使用して
MediaCrypto
を作成します。 MediaCrypto.requiresSecureDecoderComponent(mimeType)
を呼び出します。
新しいメソッド requiresSecureDecoder(@NonNull String mime)
と requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level)
を使用すると、MediaDrm
を作成した直後にこれを判断できます。
カメラ
Camera2 ベンダー拡張
Google のパートナーであるデバイス メーカーの多くは、ボケ効果、HDR、夜間モードなど、アプリでのエクスペリエンスをカスタマイズするためのカメラ拡張機能をデバイスに搭載しています。CameraX ライブラリには、こうしたカスタム ベンダー拡張機能がすでに用意されています。Android 12 では、このようなベンダー拡張機能がプラットフォームに直接公開されています。
そのため、複雑な Camera2
実装を使用するアプリでも、従来のコードに大幅な変更を加えることなく、ベンダー拡張機能を利用できるようになっています。Camera2 Extensions 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()
をご覧ください。
コンパニオン デバイス マネージャーのプロファイル
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 以降をターゲットとするアプリでは、requireDeviceScreenOn
を false
に設定することで、デバイスの画面をオンにすることなく NFC 決済を有効にできます。画面がオフまたはロック時の NFC 決済の詳細については、画面オフとロック画面の動作をご覧ください。
ストレージ
Android 12 では、次のストレージ管理機能が導入されています。
- 特定のドキュメント プロバイダの URI と同等のメディア URI をアプリが取得した場合に対応する
MediaDocumentsProvider
が、メディアストアでサポートされています。 - 音声録音用のディレクトリ。
- アプリが各操作の確認ダイアログをユーザーに表示せずにメディア管理操作を実行できる、
MANAGE_MEDIA
権限。 MANAGE_EXTERNAL_STORAGE
権限とQUERY_ALL_PACKAGES
権限の両方を持つアプリ(ファイル管理アプリなど)は、別のアプリがカスタム アクティビティを作成している場合、別のアプリの保存容量を管理するカスタム アクティビティを呼び出すことができます。
コア機能
アプリの自動アップデート
Android 12 では、PackageInstaller
API を使用するアプリ向けに setRequireUserAction()
メソッドが導入されました。このメソッドにより、ユーザーにアクションの確認を求めることなく、インストーラ アプリがアプリのアップデートを実施できます。
デバイスのチップセットに関する情報
Android 12 では、SoC チップセットのベンダー情報とモデル情報を SDK 経由で公開する 2 つの定数が android.os.Build
に追加されました。それぞれ Build.SOC_MANUFACTURER
と Build.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
|