動作の変更点: Android 13 以上をターゲットとするアプリ

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

これまでのリリースと同様、Android 13 には、アプリに影響する可能性がある動作変更が含まれています。下記の動作変更は、Android 13 以上をターゲットとするアプリにのみ適用されます。アプリが Android 13 以上をターゲットとする場合は、必要に応じてアプリを変更し、下記の動作に適切に対応できるようにしてください。

Android 13 で動作するすべてのアプリに影響する動作変更のリストも必ずご確認ください。

プライバシー

通知権限がフォアグラウンド サービスの表示に影響する

ユーザーが通知権限を拒否した場合、関連するフォアグラウンド サービスに関する通知はフォアグラウンド サービス(FGS)タスク マネージャーには引き続き表示されますが、通知ドロワーには表示されません。

付近の Wi-Fi デバイスに対する新しい実行時の権限

以前のバージョンの Android では、ユーザーはアクセス ポイント、Wi-Fi Direct 接続、Wi-Fi RTT などに関連する一般的な Wi-Fi ユースケースでは、アプリに ACCESS_FINE_LOCATION 権限を付与する必要があります。

ユーザーが位置情報の利用許可を Wi-Fi 機能に関連付けて理解するのは困難であることから、Android 13(API レベル 33)では、デバイスから付近のアクセス ポイントへの Wi-Fi 接続を管理するアプリ向けに、NEARBY_DEVICES 権限グループに新しい実行時の権限を導入しています。この NEARBY_WIFI_DEVICES 権限により、上記のような Wi-Fi ユースケースに対応できます。

アプリが Wi-Fi API から物理的な位置情報を取得しないのであれば、Android 13 以上をターゲットに設定して Wi-Fi API を使用する場合は、ACCESS_FINE_LOCATION ではなく NEARBY_WIFI_DEVICES をリクエストしてください。このプロセスは、Bluetooth デバイス情報が位置情報に使用されないことを表明する場合に Android 12(API レベル 31)以上で実行するプロセスと似ています。

詳しくは、付近の Wi-Fi デバイスに対する権限をご覧ください。

きめ細かいメディア権限

ダイアログの [許可] と [許可しない] の 2 つのボタン
図 1. READ_MEDIA_AUDIO 権限をリクエストするとユーザーに表示されるシステム権限ダイアログ。

Android 13 をターゲットとするアプリの場合、READ_EXTERNAL_STORAGE 権限や WRITE_EXTERNAL_STORAGE 権限ではなく、新しい権限を 1 つ以上リクエストする必要があります。

リクエストする権限のセットは、アプリがアクセスする必要があるメディアの種類によって異なります。

メディアの種類 リクエストする権限
画像や写真 READ_MEDIA_IMAGES
動画 READ_MEDIA_VIDEO
音声ファイル READ_MEDIA_AUDIO

ユーザーが以前にアプリに READ_EXTERNAL_STORAGE 権限を付与していた場合は、それぞれの新しい権限がアプリに自動的に付与されます。

それ以外の場合は、アプリが前の表に示すいずれかの権限をリクエストすると、ユーザー向けダイアログが表示されます。図 1 では、アプリが READ_MEDIA_AUDIO 権限をリクエストしています。READ_MEDIA_IMAGES 権限と READ_MEDIA_VIDEO 権限の 2 つを同時にリクエストした場合、システム権限ダイアログは 1 つだけ表示されます。

Android 13 をターゲットとする移行手順

Android 13 をターゲットに設定したら、アプリが必要とするメディア権限を宣言します。以前のバージョンの Android との互換性を維持するには、次のコード スニペットのように maxSdkVersion32 に設定し、READ_EXTERNAL_STORAGE 権限を宣言します。

<manifest ...>
    <!-- Required only if your app targets Android 13. -->
    <!-- Declare one or more the following permissions only if your app needs
    to access data that's protected by them. -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

    <!-- Required to maintain app compatibility. -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

バックグラウンドでボディセンサーを使用するには新しい権限が必要

Android 13 では、心拍数、体温、血中酸素率などを測定するボディセンサーへの「使用中」アクセスというコンセプトを導入しています。このアクセスモデルは、Android 10(API レベル 29)の位置情報でシステムに導入されたモデルとよく似ています。

Android 13 をターゲットとするアプリがバックグラウンドでの実行中にボディセンサー情報にアクセスする必要がある場合は、既存の BODY_SENSORS 権限に加えて、新しい BODY_SENSORS_BACKGROUND 権限を宣言する必要があります。

セキュリティ

インテント フィルタで一致しないインテントをブロックする

アプリから、Android 13 以上をターゲットとする別のアプリのエクスポート済みコンポーネントにインテントを送信する場合、そのインテントは、受信側アプリの <intent-filter> 要素と一致する場合にのみ配信されます。一致しないインテントはブロックされます。

インテント マッチングが適用されない例外:

  • インテント フィルタを宣言していないコンポーネントに配信されるインテント。
  • 同じアプリからのインテント。
  • システムからのインテント、つまり「システム UID」(uid=1000)から送信されるインテント。システムアプリとしては、system_server と、android:sharedUserIdandroid.uid.system に設定するアプリがあります。
  • ルートからのインテント。

受信側アプリが Android 13 以上にアップグレードされた場合、外部アプリから発信されるすべてのインテントは、送信側アプリがターゲットとする SDK のバージョンにかかわらず、宣言された <intent-filter> 要素と一致する場合にのみ、エクスポートされたコンポーネントに配信されます。

パフォーマンスとバッテリー

バッテリー リソース運用

ユーザーが Android 13 をターゲットとするアプリをバックグラウンドのバッテリー使用量について「制限付き」状態に設定すると、システムによってブロードキャストに関するいくつかの制限が適用されます。

詳しくは、Android 13 で導入されたバッテリー リソース運用機能について説明しているページで、バックグラウンドの制限付きバッテリー使用量に関する新しい制限をご覧ください。

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

PlaybackState から派生するメディア コントロール

Android 13(API レベル 33)以上をターゲットとするアプリの場合は、PlaybackState アクションからメディア コントロールが派生します。そのため、スマートフォンとタブレット間で技術的に一貫した豊富なコントロールを表示できます。このコントロールは、Android Auto や Android TV など、各種の Android プラットフォームでのメディア コントロールのレンダリング方法に沿って表示されます。

図 2 に、スマートフォンとタブレットでの表示例をそれぞれ示します。

スマートフォンとタブレットでのメディア コントロールの表示例(ボタンがどのように表示されるかをサンプル トラックで例示しています)
図 2: スマートフォンとタブレットでのメディア コントロールの表示

Android 13 より前のシステムでは、MediaStyle 通知から最大 5 つのアクションが、追加された順序で表示されていました。折りたたまれたクイック設定パネルなどのコンパクト モードでは、setShowActionsInCompactView() によって指定された最大 3 つのアクションが表示されていました。

Android 13 以上では、次の表に示すように、PlaybackState に基づいて最大 5 つのアクション ボタンが表示されます。コンパクト モードでは、最初の 3 つのアクション スロットのみが表示されます。Android 13 をターゲットとしないアプリ、または PlaybackState を含まないアプリの場合は、前の段落で示したように、MediaStyle 通知に追加された Action リストに基づいてコントロールが表示されます。

スロット アクション 条件
1 再生 PlaybackState の現在の状態は次のいずれかです。
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
読み込み中アイコン PlaybackState の現在の状態は次のいずれかです。
  • STATE_CONNECTING
  • STATE_BUFFERING
一時停止 PlaybackState の現在の状態は上記以外です。
2 前へ PlaybackState アクションACTION_SKIP_TO_PREVIOUS が含まれます。
カスタム PlaybackState アクションACTION_SKIP_TO_PREVIOUS が含まれません。PlaybackState カスタム アクションには、まだ配置されていないカスタム アクションが含まれます。
PlaybackState エクストラには、SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV キーの true ブール値が含まれます。
3 次へ PlaybackState アクションACTION_SKIP_TO_NEXT が含まれます。
カスタム PlaybackState アクションACTION_SKIP_TO_NEXT が含まれません。PlaybackState カスタム アクションには、まだ配置されていないカスタム アクションが含まれます。
PlaybackState エクストラには、SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT キーの true ブール値が含まれます。
4 カスタム PlaybackState カスタム アクションには、まだ配置されていないカスタム アクションが含まれます。
5 カスタム PlaybackState カスタム アクションには、まだ配置されていないカスタム アクションが含まれます。

カスタム アクションは、PlaybackState に追加された順序で配置されます。