בקשת הרשאת גישה למכשירי Wi-Fi בקרבת מקום

אפליקציות שמטרגטות ל-Android 13 (רמת API 33) ומעלה ומנהלות חיבורי Wi-Fi צריכות לבקש את הרשאת זמן הריצהNEARBY_WIFI_DEVICES. ההרשאה הזו מקלה על הצדקת הגישה של אפליקציה למכשירי Wi-Fi בקרבת מקום. בגרסאות קודמות של Android, האפליקציות האלה נדרשו להצהיר על ההרשאה ACCESS_FINE_LOCATION במקום זאת.

ההרשאה היא חלק מהקבוצה 'מכשירים בקרבת מקום'

ההרשאה NEARBY_WIFI_DEVICES היא חלק מקבוצת ההרשאות מכשירים בקרבת מקום. הקבוצה הזו, שנוספה ב-Android 12 (רמת API 31), כוללת גם הרשאות שקשורות ל-Bluetooth ולפס רחב במיוחד. כשמבקשים שילוב כלשהו של הרשאות מקבוצת ההרשאות הזו, המערכת מציגה תיבת דו-שיח אחת בזמן הריצה ומבקשת מהמשתמש לאשר את הגישה של האפליקציה למכשירים בקרבת מקום. בהגדרות המערכת, המשתמשים צריכים להפעיל ולהשבית את ההרשאות של מכשירים בקרבת מקום כקבוצה. לדוגמה, המשתמשים לא יכולים להשבית את הגישה ל-Wi-Fi אבל להשאיר את הגישה ל-Bluetooth מופעלת עבור אפליקציה מסוימת.

הצהרה חד-משמעית שהאפליקציה לא מסיקה מיקום פיזי

כשמטרגטים ל-Android 13 ומעלה, צריך לבדוק אם האפליקציה אי פעם מקבלת נתוני מיקום מממשקי API של Wi-Fi. אם לא, מומלץ להצהיר על כך. כדי להצהיר על כך, צריך להגדיר את המאפיין usesPermissionFlags לערך neverForLocation בקובץ המניפסט של האפליקציה, כמו שמוצג בקטע הקוד הבא. התהליך הזה דומה לתהליך שמתבצע כשמצהירים שפרטי מכשיר Bluetooth אף פעם לא משמשים למיקום:

<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 כדי להפעיל קריאה לכל אחד מממשקי ה-API הבאים של Wi-Fi:

תהליכי עבודה של גישה ל-Wi-Fi

איור 1 מציג את תהליך העבודה של גישה ל-Wi-Fi במכשירים עם Android מגרסה 13 ואילך, עבור אפליקציות שמיועדות ל-Android מגרסה 13 ואילך. שימו לב: כל עוד אתם מציינים שהאפליקציה שלכם לא מסיקה מיקום פיזי מפרטי מכשיר Wi-Fi, אתם לא צריכים יותר להצהיר על ההרשאה ACCESS_FINE_LOCATION:

איור 1. תרשים זרימה לקביעה אם אפליקציה שמטרגטת ל-Android 13 (רמת API 33) ומעלה יכולה לגשת לפרטי Wi-Fi.

איור 2 מציג את תהליך העבודה של גישה ל-Wi-Fi במכשירים עם Android מגרסה 12L ומטה. שימו לב להסתמכות על ההרשאה ACCESS_FINE_LOCATION.

איור 2. תרשים זרימה לקביעה אם לאפליקציה שמטרגטת ל-12L (רמת API 32) או לגרסה נמוכה יותר יש גישה למידע על Wi-Fi.