ขอสิทธิ์เข้าถึงอุปกรณ์ 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 บางรายการต้องการสิทธิ์เข้าถึงตำแหน่ง

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 ได้