בקשת הרשאת גישה למכשירי 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. תרשים זרימה כדי לבדוק אם אפליקציה שמטרגטת ל-12L (רמת API 32) או פחות יכולים לגשת לנתוני Wi-Fi.