אפליקציות שמטרגטות ל-Android 13 (רמת API 33) ומעלה ומנהלות חיבורי Wi-Fi צריכות לבקש את NEARBY_WIFI_DEVICES
הרשאת זמן הריצה. ההרשאה הזו מקלה על הצדקת הגישה של אפליקציה למכשירי Wi-Fi בקרבת מקום. בגרסאות קודמות של Android, האפליקציות האלה נדרשו להצהיר על ההרשאה ACCESS_FINE_LOCATION במקום זאת.
ההרשאה היא חלק מקבוצת המכשירים הקרובים
ההרשאה NEARBY_WIFI_DEVICES היא חלק מקבוצת ההרשאות מכשירים קרובים. הקבוצה הזו, שנוספה ב-Android 12 (רמת API 31), כוללת גם הרשאות שקשורות ל-Bluetooth ול-Ultra Wideband (UWB). כשמבקשים שילוב כלשהו של הרשאות מקבוצת ההרשאות הזו, המערכת מציגה תיבת דו-שיח אחת בזמן הריצה ומבקשת מהמשתמש לאשר את הגישה של האפליקציה למכשירים בקרבת מקום.
בהגדרות המערכת, המשתמש צריך להפעיל ולהשבית את ההרשאות של מכשירים בקרבת מקום כקבוצה. לדוגמה, המשתמשים לא יכולים להשבית את הגישה ל-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:
WifiManagerWifiAwareManagerWifiAwareSessionWifiP2pManagerWifiRttManager
תהליכי עבודה של גישה ל-Wi-Fi
איור 1 מציג את תהליך העבודה של גישה ל-Wi-Fi במכשירים עם Android מגרסה 13 ואילך, באפליקציות שמיועדות ל-Android מגרסה 13 ואילך. שימו לב: אם אתם מצהירים שהאפליקציה שלכם לא מסיקה מיקום פיזי מפרטי מכשיר Wi-Fi, אתם לא צריכים יותר להצהיר על ההרשאה ACCESS_FINE_LOCATION:
באיור 2 מוצג תהליך העבודה של גישת Wi-Fi במכשירים עם גרסה 12L ומטה. שימו לב להסתמכות על ההרשאה ACCESS_FINE_LOCATION.