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