แอปที่กำหนดเป้าหมายเป็น Android 13 (API ระดับ 33) ขึ้นไปและจัดการการเชื่อมต่อ Wi-Fi
ควรขอสิทธิ์รันไทม์
NEARBY_WIFI_DEVICES
สิทธิ์นี้
ช่วยให้การขอสิทธิ์เข้าถึงอุปกรณ์ Wi-Fi ที่อยู่ใกล้เคียงของแอปสมเหตุสมผลมากขึ้น
โดยใน Android เวอร์ชันก่อนหน้า แอปเหล่านี้ต้องประกาศสิทธิ์
ACCESS_FINE_LOCATION
แทน
SecurityException
สิทธิ์เป็นส่วนหนึ่งของกลุ่มสิทธิ์เข้าถึงอุปกรณ์ที่อยู่ใกล้เคียง
สิทธิ์ NEARBY_WIFI_DEVICES เป็นส่วนหนึ่งของกลุ่มสิทธิ์เข้าถึงอุปกรณ์ที่อยู่ใกล้เคียง กลุ่มนี้ซึ่งเพิ่มเข้ามาใน Android 12 (ระดับ API 31) ยังรวมถึงสิทธิ์ที่เกี่ยวข้องกับบลูทูธและแถบความถี่กว้างยิ่งยวด เมื่อคุณขอสิทธิ์หลายรายการจากกลุ่มสิทธิ์นี้ ระบบจะแสดงกล่องโต้ตอบรันไทม์เดียวและขอให้ผู้ใช้อนุมัติการเข้าถึงอุปกรณ์ที่อยู่ใกล้เคียงของแอป
ในการตั้งค่าระบบ ผู้ใช้ต้องเปิดและปิดสิทธิ์เข้าถึงอุปกรณ์ที่อยู่ใกล้เคียง เป็นกลุ่ม เช่น ผู้ใช้จะปิดใช้การเข้าถึง Wi-Fi แต่เปิดใช้การเข้าถึงบลูทูธสำหรับแอปหนึ่งๆ ไม่ได้
ยืนยันอย่างหนักแน่นว่าแอปไม่ได้ระบุตำแหน่งทางกายภาพ
เมื่อกำหนดเป้าหมายเป็น Android 13 ขึ้นไป ให้พิจารณาว่าแอปของคุณเคยระบุข้อมูลตำแหน่งจาก Wi-Fi API หรือไม่ หากไม่เคย คุณควรยืนยันอย่างหนักแน่นว่าแอปไม่เคยระบุข้อมูลตำแหน่งจาก 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 ต่อไปนี้
WifiManagerWifiAwareManagerWifiAwareSessionWifiP2pManagerWifiRttManager
เวิร์กโฟลว์การเข้าถึง Wi-Fi
รูปที่ 1 แสดงเวิร์กโฟลว์การเข้าถึง Wi-Fi ในอุปกรณ์ที่ใช้ Android 13 ขึ้นไป สำหรับแอปที่กำหนดเป้าหมายเป็น Android 13 ขึ้นไป โปรดทราบว่าตราบใดที่คุณยืนยันว่าแอปไม่ได้ระบุตำแหน่งทางกายภาพจากข้อมูลอุปกรณ์ Wi-Fi คุณก็ไม่จำเป็นต้องประกาศสิทธิ์ ACCESS_FINE_LOCATION อีกต่อไป
รูปที่ 2 แสดงเวิร์กโฟลว์การเข้าถึง Wi-Fi ในอุปกรณ์ที่ใช้ 12L ลงไป โปรดทราบว่าต้องใช้สิทธิ์ ACCESS_FINE_LOCATION