要求存取鄰近 Wi-Fi 裝置的權限

指定 Android 13 (API 級別 33) 以上版本,並管理 Wi-Fi 連線的應用程式 應要求 NEARBY_WIFI_DEVICES敬上 執行階段權限。這個 權限可讓您更輕鬆地證明應用程式能存取附近的 Wi-Fi 裝置; 舊版 Android 裝置上的應用程式必須宣告 ACCESS_FINE_LOCATION敬上 權限。

權限是鄰近裝置群組的一部分

NEARBY_WIFI_DEVICES 權限是鄰近裝置的一部分 權限群組。在 Android 12 (API 級別 31) 中新增的群組也包括 具備藍牙和超寬頻的相關權限。當您要求 則會顯示一個 ,並要求使用者核准您的應用程式存取鄰近裝置。 在系統設定中,使用者必須啟用及停用鄰近裝置 權限;例如,使用者無法停用 Wi-Fi 存取, 已啟用特定應用程式的藍牙存取。

嚴格宣告應用程式不會衍生實體位置

指定 Android 13 以上版本為目標時,請考慮您的應用程式 透過 Wi-Fi API 取得位置資訊。如果不是的話,就應該非常 就能做出判斷如要做出此斷言,請將 usesPermissionFlags 屬性設為 應用程式資訊清單檔案中的 neverForLocation,如以下程式碼所示 程式碼片段。這項程序和您執行 聲明不得將藍牙裝置資訊用於位置資訊

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

舊版和部分 API 需要位置存取權

有些 Wi-Fi API 需要 ACCESS_FINE_LOCATION 權限,即使 應用程式指定 Android 13 以上版本。相關示例包括: WifiManager 類別的方法:

此外,因為 NEARBY_WIFI_DEVICES 權限僅適用於 Android 13 以上版本,請務必針對 ACCESS_FINE_LOCATION 以便在應用程式中提供回溯相容性不過, 不會以其他方式仰賴 精確位置資訊,你可以: 將這項權限的 SDK 最高版本設為 32,如 下列程式碼片段:

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

檢查需要該權限的 API

如果應用程式指定 Android 13 以上版本為目標,您必須宣告 NEARBY_WIFI_DEVICES 權限可呼叫下列任一 Wi-Fi API:

Wi-Fi 存取工作流程

圖 1 顯示執行裝置的 Wi-Fi 存取工作流程 Android 13 以上版本 (適用於指定為目標版本的應用程式) Android 13 以上版本。請注意,只要您 應用程式無法透過 Wi-Fi 裝置資訊取得實際位置資訊,您 不再需要宣告 ACCESS_FINE_LOCATION 權限:

圖 1. 流程圖 判斷應用程式指定的是 Android 13 (API 級別 33) 以上版本 存取 Wi-Fi 資訊。

圖 2 顯示執行裝置的 Wi-Fi 存取工作流程 12L 以下。請注意 ACCESS_FINE_LOCATION權限。

圖 2. 流程圖 判斷應用程式指定的是 12L (API 級別 32) 以下版本 存取 Wi-Fi 資訊。