ขอสิทธิ์เข้าถึงอุปกรณ์ 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 ของแอป ดังที่แสดงในข้อมูลโค้ดต่อไปนี้ กระบวนการนี้คล้ายกับกระบวนการที่คุณทำเมื่อยืนยันว่าไม่มีการใช้ข้อมูลอุปกรณ์บลูทูธเพื่อระบุตำแหน่ง ดังนี้

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

เวอร์ชันก่อนหน้าและ API บางรายการต้องใช้สิทธิ์เข้าถึงตำแหน่ง

API ของ Wi-Fi หลายรายการต้องใช้สิทธิ์ 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 ได้หรือไม่