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