Android 13 デベロッパー プレビューへようこそ。フィードバックをお送りいただき、Android 13 をさらに優れたリリースにするためにご協力ください。

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

Android 13 では、デバイスから付近のアクセス ポイントへの Wi-Fi 接続を管理するアプリ向けに、NEARBY_DEVICES 権限グループの一部として NEARBY_WIFI_DEVICES という実行時の権限を導入しています。この権限を使用すると、アプリが付近の Wi-Fi デバイスにアクセスする正当性を簡単に示すことができます。以前のバージョンの Android では、この種のアプリは代わりに ACCESS_FINE_LOCATION 権限を宣言する必要がありました。

Android 13 をターゲットとするアプリは、複数の Wi-Fi API を呼び出す場合、ユーザーからこの新しい権限を取得する必要があります。

影響を受けるユースケース

次のような Wi-Fi のユースケースは、この新しい権限の影響を受けます。

  • 付近のデバイス(プリンタやメディア キャスト デバイスなど)を検出または接続する。このワークフローでは、次のようなタスクをアプリで実行できます。
    • 帯域外で AP 情報を受信する(BLE 経由など)。
    • ローカル専用アクセス ポイントを使用して、Wi-Fi Aware と Connect でデバイスを検出して接続する。
    • Wi-Fi Direct でデバイスを検出して接続する。
  • 既知の SSID への接続を開始する(車やスマートホーム デバイスなど)。
  • ローカル専用のホットスポットを開始する。
  • 付近の Wi-Fi Aware デバイスを探索する。

権限は「付近のデバイス」グループに含まれる

NEARBY_WIFI_DEVICES 権限は、付近のデバイス権限グループに含まれます。このグループは Android 12(API レベル 31)で追加されており、Bluetooth と超広帯域無線に関連する権限も含まれています。アプリがこの権限グループ内の複数の権限をリクエストした場合、ユーザーには実行時のダイアログが 1 つ表示され、アプリが付近のデバイスにアクセスすることを承認するように求められます。システム設定で、ユーザーは付近のデバイスの各権限をグループとして有効または無効にする必要があります。たとえば、特定のアプリに対して、Bluetooth アクセスを有効にしたまま Wi-Fi アクセスを無効にすることはできません。

アプリが物理的な位置情報を取得しないことを強く表明する

Android 13 をターゲットとする場合は、アプリで Wi-Fi API から位置情報を取得するかどうかを検討してください。取得しない場合は、そのことを強く表明する必要があります。この表明を行うには、次のコード スニペットに示すように、アプリのマニフェスト ファイルで usesPermissionFlags 属性を neverForLocation に設定します。この手順は、Bluetooth デバイスの情報が位置情報に使用されないことを表明する場合と同様です。

<manifest ...>
    <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
                     android:usesPermissionFlags="neverForLocation" />
    <application ...>
        ...
    </application>
</manifest>

下位互換性を維持する

NEARBY_WIFI_DEVICES 権限は Android 13 以上でのみ使用できるため、アプリで下位互換性を確保するには、すべての宣言で ACCESS_FINE_LOCATION のままにする必要があります。ただし、アプリが物理的な位置情報の取得に Wi-Fi API を使用しないことを強く表明している限り、次のコード スニペットのようにして、この権限の最大 SDK バージョンを 32 に設定できます。

<manifest ...>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

一部の API では引き続き位置情報の権限が必要

12L 以下の場合と同様に、一部の Wi-Fi API では引き続きアクセスに ACCESS_FINE_LOCATION 権限が必要です。WifiManager クラスの次のメソッドがその例です。

新しい権限が必要な API を確認する

Android 13 以上をターゲットとするアプリの場合、次の Wi-Fi API を呼び出すには NEARBY_WIFI_DEVICES 権限の宣言が必要です。

Wi-Fi アクセスのワークフロー

図 1 は、12L 以下を搭載しているデバイスでの Wi-Fi アクセスのワークフローを示しています。ACCESS_FINE_LOCATION 権限への依存に注意してください。

図 1. 12 L 以下をターゲットとするアプリが Wi-Fi 情報にアクセスできるかどうかを判別するフローチャート

図 2 は、Android 13 以上をターゲットとするアプリが、Android 13 以上を搭載したデバイスで Wi-Fi アクセスを行う際のワークフローを示しています。なお、アプリが Wi-Fi デバイス情報から物理的な位置情報を取得しないと表明する場合、ACCESS_FINE_LOCATION 権限を宣言する必要はありません。

図 2. Android 13 以上をターゲットとするアプリが Wi-Fi 情報にアクセスできるかどうかを判別するフローチャート