Privacy changes in Android 10

Android 10(API レベル 29)では、ユーザーのプライバシー保護を強化するために、さまざまな機能と動作が変更されています。これらの変更により、ユーザーのデータおよびアプリに提供する機能に対する透明性と管理性が広がります。これらの機能は、アプリが依存する特定の動作やデータの動作が、古いバージョンのプラットフォームと異なる可能性があることを意味します。ユーザーデータの処理に関する最新のおすすめの方法にアプリが従っている場合は、アプリへの影響を最小限に抑える必要があります。

このページでは各変更の概要を説明します。

主な変更点

このセクションでは、プライバシーに関連する Android 10 の主な変更点について説明します。

アプリのファイルとメディアを対象とする外部ストレージ アクセス

デフォルトでは、Android 10 以降をターゲットとするアプリには、外部ストレージに対するスコープ アクセス、つまり対象範囲別ストレージが付与されます。このようなアプリは、ストレージ関連のユーザー権限をリクエストしなくても、外部ストレージ デバイス内の次のタイプのファイルを参照できます。

  • getExternalFilesDir() を使用してアクセスするアプリ固有のディレクトリ内のファイル
  • アプリによってメディアストアから作成された写真、動画、音声クリップ。

対象範囲別ストレージと、外部ストレージ デバイスに保存されているファイルを共有、アクセス、変更する方法については、外部ストレージのファイルを管理する方法と、メディア ファイルにアクセスして変更する方法に関するガイドをご覧ください。

デバイスの位置情報へのバックグラウンドでのアクセスに必要な権限

位置情報へのアプリのアクセス権をユーザーが制御できるようにするため、Android 10 では ACCESS_BACKGROUND_LOCATION 権限が導入されています。

ACCESS_FINE_LOCATION 権限や ACCESS_COARSE_LOCATION 権限とは異なり、ACCESS_BACKGROUND_LOCATION 権限は、アプリがバックグラウンドで実行されているときのみ、アプリの位置情報へのアクセスに影響します。次のいずれかの条件が満たされない限り、アプリはバックグラウンドで位置情報にアクセスしているとみなされます。

  • 対象アプリに属するアクティビティが表示されている。
  • フォアグラウンド サービス タイプ location を宣言したフォアグラウンド サービスをアプリが実行している。

    アプリ内のサービスのフォアグラウンド サービス タイプを宣言するには、アプリの targetSdkVersion または compileSdkVersion29 以上に設定します。フォアグラウンド サービスで、位置情報へのアクセスを必要とするユーザー開始型アクションを継続する方法をご確認ください。

アプリがジオフェンスを作成してモニタリングし、Android 10(API レベル 29)以降をターゲットとしている場合は、ACCESS_BACKGROUND_LOCATION 権限を宣言する必要があります。

Android 9 以前をターゲットとするときに自動的に許可されるアクセス

Android 10 以降で実行されているアプリが Android 9(API レベル 28)以前をターゲットとしている場合、プラットフォームは次の動作を適用します。

  • アプリが ACCESS_FINE_LOCATION または ACCESS_COARSE_LOCATION のいずれかに <uses-permission> 要素を宣言すると、インストール時に ACCESS_BACKGROUND_LOCATION<uses-permission> 要素が自動的に追加されます。
  • アプリが ACCESS_FINE_LOCATION または ACCESS_COARSE_LOCATION のいずれかをリクエストした場合、そのリクエストに対して ACCESS_BACKGROUND_LOCATION が自動的に追加されます。

デバイスが Android 10 にアップグレードされたときのアクセス

ユーザーがアプリにデバイスの位置情報へのアクセス権(ACCESS_COARSE_LOCATION または ACCESS_FINE_LOCATION のいずれか)を許可した後、デバイスを Android 9 から Android 10 にアップグレードすると、アプリに付与されている位置情報に基づく権限のセットがシステムによって自動的に更新されます。アップグレード後にアプリが受け取る権限のセットは、次の表に示すように、ターゲット SDK のバージョンと定義済みの権限によって異なります。

表 1. デバイスを Android 10 にアップグレードした後の位置情報の利用許可の状態の変化

ターゲット プラットフォームのバージョン 大まかな
権限またはきめ細かい権限の
付与
バックグラウンド権限がマニフェスト
で定義されているか?
更新されたデフォルトのアクセス権限の状態
Android 10 はい フォアグラウンドとバックグラウンドでのアクセス権限
Android 10 はい × フォアグラウンドでのアクセス権限のみ
Android 10 × (システムによって無視される) アクセス権限なし
Android 9 以前 はい デバイスのアップグレード時に自動的に追加される フォアグラウンドとバックグラウンドでのアクセス権限
Android 9 以前 × (システムによって無視される) アクセス権がありません

デバイスの位置情報へのアプリのアクセス権がシステムによって自動更新された後でも、ユーザーはこのアクセスレベルを変更できます。たとえば、ユーザーはアプリのアクセス権をフォアグラウンドのみに制限したり、アクセス権を完全に取り消したりできます。アプリはデバイスの位置情報にアクセスする前に(特にフォアグラウンド サービス内で)、この位置情報の受信をアプリが引き続き許可しているかどうかを確認する必要があります。

Android 10 デバイスで対象 API レベルを更新するとアクセス権が取り消される

Android 10 を搭載したデバイスにアプリがすでにインストールされているとします。この場合、Android 10 をターゲットとするようにアプリを更新すると、デバイスは ACCESS_BACKGROUND_LOCATION 権限を取り消します。

アプリがバックグラウンドで動作しているときにデバイスの位置情報を取得する方法の詳細については、位置情報の定期的な更新の受信に関するガイドをご覧ください。

バックグラウンドからのアクティビティの起動に関する制限

Android 10 以降では、バックグラウンドからのアクティビティの起動に関する制限が設けられています。この動作変更により、ユーザーの中断を最小限に抑え、ユーザーは画面に表示される内容をより細かく制御できます。ユーザー操作の直接の結果としてアプリがアクティビティを開始する限り、アプリはほとんどの場合、こうした制限の影響を受けません。

バックグラウンドからアクティビティを開始する場合に推奨される代替手段について詳しくは、時間的制約のあるイベントをユーザーに通知する方法に関するガイドをご覧ください。

ID とデータ

このセクションでは、デバイス ID とデータの操作に固有の変更について説明します。

連絡先アフィニティの削除

Android 10 以降、プラットフォームは連絡先アフィニティ情報を追跡しません。そのため、アプリがユーザーの連絡先に対して検索を実行しても、結果がインタラクションの頻度で並べ替えられることはありません。

ContactsProvider に関するガイドには、Android 10 以降のすべてのデバイスでサポートが終了したフィールドとメソッドに関する注意事項が記載されています。

MAC アドレスのランダム化

Android 10 以降を搭載したデバイスでは、デフォルトでランダム化された MAC アドレスが送信されます。

エンタープライズ ユースケースを扱うアプリ向けに、プラットフォームには MAC アドレスに関連するオペレーション用の API が用意されています。

  • ランダム MAC アドレスを取得する: デバイス オーナー アプリとプロファイル オーナー アプリは、getRandomizedMacAddress() を呼び出して、特定のネットワークに割り当てられたランダム MAC アドレスを取得できます。
  • 実際の出荷時 MAC アドレスを取得する: デバイス オーナー アプリは、getWifiMacAddress() を呼び出すことで、デバイスの実際のハードウェア MAC アドレスを取得できます。このメソッドは、大量のデバイスをトラッキングする際に便利です。

/proc/net ファイル システムへのアクセスに関する制限

Android 10 以降を搭載したデバイスでは、アプリはデバイスのネットワーク状態に関する情報を含む /proc/net にアクセスできません。VPN など、この情報にアクセスする必要があるアプリでは、NetworkStatsManager クラスまたは ConnectivityManager クラスを使用する必要があります。

再設定不可能なデバイス ID に関する制限

Android 10 以降、IMEI とシリアル番号の両方を含むリセット不可能なデバイスの識別子にアクセスするには、アプリに READ_PRIVILEGED_PHONE_STATE 特権が必要です。

影響を受けるメソッドは次のとおりです。

アプリに権限がなく、リセット不可能な識別子に関する情報を要求した場合、プラットフォームのレスポンスはターゲット SDK のバージョンによって異なります。

  • Android 10 以降をターゲットとするアプリの場合、SecurityException が発生します。
  • アプリが Android 9(API レベル 28)以前をターゲットとしている場合、アプリに READ_PHONE_STATE 権限があれば、このメソッドは null またはプレースホルダ データを返します。そうでない場合は、SecurityException が発生します。

多くのユースケースでは、再設定不可能なデバイス ID は不要です。たとえば、アプリが広告トラッキングやユーザー分析の目的でリセット不可能なデバイス ID を使用している場合は、そのような特定のユースケースに代わりに Android 広告 ID を使用します。詳しくは、一意の識別子に関するベスト プラクティスをご覧ください。

クリップボード データへの制限付きアクセス

アプリがデフォルトのインプット メソッド エディタ(IME)であるか、現在フォーカスされているアプリでない限り、Android 10 以降ではクリップボード データにアクセスできません。

USB デバイスのシリアル番号の保護

Android 10 以降をターゲットとするアプリの場合、ユーザーが USB デバイスや USB アクセサリにアクセスする権限をアプリに付与するまで、アプリはシリアル番号を読み取ることができません。

USB デバイスの操作について詳しくは、USB ホストを構成する方法のガイドをご覧ください。

カメラと接続

このセクションでは、カメラのメタデータと接続 API に固有の変更について説明します。

カメラの詳細とメタデータへのアクセスに関する制限

Android 10 では、getCameraCharacteristics() メソッドによってデフォルトで返される情報の幅が変更されています。特に、このメソッドの戻り値に含まれる可能性があるデバイス固有のメタデータにアクセスするには、アプリに CAMERA 権限が必要です。

これらの変更について詳しくは、権限が必要なカメラ フィールドに関するセクションをご覧ください。

Wi-Fi の有効化 / 無効化に関する制限

Android 10 以降をターゲットとするアプリでは、Wi-Fi を有効または無効にすることはできません。WifiManager.setWifiEnabled() メソッドは常に false を返します。

Wi-Fi の有効 / 無効を切り替えるようにユーザーに促す必要がある場合は、設定パネルを使用します。

設定済み Wi-Fi ネットワークへの直接アクセスに関する制限

ユーザーのプライバシーを保護するため、Wi-Fi ネットワーク リストの手動構成は、システムアプリと Device Policy Controller(DPC)に限定されています。特定の DPC は、デバイス オーナーまたはプロファイル オーナーのいずれかになります。

Android 10 以降をターゲットとするアプリがシステムアプリや DPC でない場合、次のメソッドは有用なデータを返しません。

アプリが Wi-Fi ネットワークに接続する必要がある場合は、以下の別の方法を使用してください。

  • Wi-Fi ネットワークへのインスタント ローカル接続をトリガーするには、標準の NetworkRequest オブジェクトで WifiNetworkSpecifier を使用します。
  • ユーザーにインターネット アクセスを提供するために Wi-Fi ネットワークを追加するには、WifiNetworkSuggestion オブジェクトを使用します。自動接続ネットワーク選択ダイアログに表示されるネットワークを追加または削除するには、それぞれ addNetworkSuggestions()removeNetworkSuggestions() を呼び出します。この 2 つのメソッドは、位置情報の利用許可を必要としません。

一部の電話、Bluetooth、Wi-Fi API に FINE 位置情報の利用許可が必要

Android 10 以降をターゲットとするアプリで Wi-Fi API、Wi-Fi Aware API、Bluetooth API 内の複数のメソッドを使用するには、ACCESS_FINE_LOCATION 権限が必要です。以下のセクションでは、影響を受けるクラスとメソッドを示します。

電話

Wi-Fi

Bluetooth

権限

このセクションでは、Android 権限モデルのアップデートについて説明します。

画面コンテンツに対するアクセスの制限

ユーザーの画面コンテンツを保護するため、Android 10 では、READ_FRAME_BUFFERCAPTURE_VIDEO_OUTPUTCAPTURE_SECURE_VIDEO_OUTPUT 権限の範囲を変更することで、デバイスの画面コンテンツへのサイレント アクセスを防止しています。Android 10 では、これらの権限は signature アクセスのみです。

デバイスの画面コンテンツにアクセスする必要があるアプリは、MediaProjection API を使用する必要があります。これにより、ユーザーに同意を求めるプロンプトが表示されます。

旧式アプリに関するユーザー向けアクセス権限チェック

Android 5.1(API レベル 22)以前をターゲットとするアプリの場合、Android 10 以降を搭載したデバイスで初めてアプリを使用すると、図 1 のような権限画面が表示されます。この画面では、インストール時にアプリが以前に付与した権限へのアクセス権を取り消すことができます。

ダイアログのスクリーンショット
図 1. 従来の権限を確認できるユーザー向けダイアログ

操作の認識

Android 10 では、ユーザーの歩数を検出したり、徒歩、サイクリング、車の運転など、ユーザーの身体活動を分類したりする必要があるアプリ向けに、実行時の権限 android.permission.ACTIVITY_RECOGNITION が導入されています。このアクセス権限は、デバイスのセンサーデータが [設定] 内でどのように使用されているのかをユーザーに表示するように設計されています。

Google Play 開発者サービス内の一部のライブラリ(Activity Recognition APIGoogle Fit API など)では、ユーザーがアプリに対してこの権限を付与しない限り、結果が提供されません。

デバイス上のこの権限の宣言が必要な組み込みセンサーは、歩数計歩数検出センサーのみです。

Android 9(API レベル 28)以前をターゲットとするアプリでは、アプリが次の条件をすべて満たしていれば、必要に応じて android.permission.ACTIVITY_RECOGNITION 権限が自動的に付与されます。

  • マニフェスト ファイルには com.google.android.gms.permission.ACTIVITY_RECOGNITION 権限が含まれます。
  • マニフェスト ファイルには android.permission.ACTIVITY_RECOGNITION 権限は含まれません

システムによって android.permission.ACTIVITY_RECOGNITION 権限が自動的に付与される場合、Android 10 を対象とするようにアプリを更新しても、アプリは権限を保持します。ただし、ユーザーはいつでもシステム設定でこの権限を取り消すことができます。

UI から削除された権限グループ

Android 10 の時点では、アプリは UI で権限をグループ化する方法を検索できません。