בקשת הרשאת גישה למכשירי 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 ול-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:

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

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

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

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

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