แอปที่กำหนดเป้าหมายเป็น 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 ของแอป ดังที่แสดงในข้อมูลโค้ดต่อไปนี้ ขั้นตอนนี้คล้ายกับขั้นตอนที่คุณทำเมื่อ
ยืนยันว่าจะไม่มีการใช้ข้อมูลอุปกรณ์บลูทูธสำหรับตำแหน่ง ให้ทำดังนี้
<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 ใดก็ตามต่อไปนี้
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
เวิร์กโฟลว์การเข้าถึง Wi-Fi
รูปที่ 1 แสดงเวิร์กโฟลว์การเข้าถึง Wi-Fi ในอุปกรณ์ที่ใช้ Android 13 ขึ้นไปสําหรับแอปที่กําหนดเป้าหมายเป็น Android 13 ขึ้นไป โปรดทราบว่า ตราบใดที่คุณยืนยันว่า
แอปไม่ได้รับตำแหน่งทางกายภาพจากข้อมูลอุปกรณ์ Wi-Fi คุณไม่ต้อง
จำเป็นต้องประกาศสิทธิ์ ACCESS_FINE_LOCATION
อีกต่อไป
รูปที่ 2 แสดงเวิร์กโฟลว์การเข้าถึง Wi-Fi ในอุปกรณ์ที่ทำงาน
12L หรือต่ำกว่า โปรดทราบว่าต้องใช้สิทธิ์
ACCESS_FINE_LOCATION