אפליקציות שמטרגטות את 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. כשמבקשים שילוב כלשהו של הרשאות מקבוצת ההרשאות הזו, המערכת מציגה תיבת דו-שיח אחת בסביבת זמן הריצה ומבקשת מהמשתמש לאשר את הגישה של האפליקציה למכשירים בקרבת מקום.
בהגדרות המערכת, המשתמשים צריכים להפעיל ולהשבית את ההרשאות של מכשירים בקרבת מקום כקבוצה. לדוגמה, המשתמשים לא יכולים להשבית את הגישה ל-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 במכשירים עם צריכת אנרגיה של 12L או פחות. שימו לב להסתמכות על ההרשאה ACCESS_FINE_LOCATION
.