אפליקציות שמטרגטות ל-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:
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
תהליכי עבודה של גישה ל-Wi-Fi
איור 1 מציג את תהליך העבודה של גישה ל-Wi-Fi במכשירים עם Android מגרסה 13 ואילך, עבור אפליקציות שמיועדות ל-Android מגרסה 13 ואילך. שימו לב: כל עוד אתם מציינים שהאפליקציה שלכם לא מסיקה מיקום פיזי מפרטי מכשיר Wi-Fi, אתם לא צריכים יותר להצהיר על ההרשאה ACCESS_FINE_LOCATION
:
איור 2 מציג את תהליך העבודה של גישה ל-Wi-Fi במכשירים עם Android מגרסה 12L ומטה. שימו לב להסתמכות על ההרשאה ACCESS_FINE_LOCATION
.