אפליקציות שמטרגטות את 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
.