درخواست اجازه برای دسترسی به دستگاه‌های Wi-Fi اطراف

برنامه‌هایی که Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) یا بالاتر را هدف قرار می‌دهند و اتصال‌های Wi-Fi را مدیریت می‌کنند باید NEARBY_WIFI_DEVICES اجازه زمان اجرا را درخواست کنند. این اجازه توجیه دسترسی برنامه به دستگاه‌های Wi-Fi اطراف را آسان‌تر می‌کند؛ در نسخه‌های قبلی Android، این برنامه‌ها باید به‌جای آن اجازه ACCESS_FINE_LOCATION را اعلام می‌کردند.

اجازه بخشی از گروه دستگاه‌های اطراف است

اجازه NEARBY_WIFI_DEVICES بخشی از گروه اجازه دستگاه‌های اطراف است. این گروه که در Android 12 (سطح میانای برنامه‌سازی کاربردی ۳۱) اضافه شده است، اجازه‌های مربوط به بلوتوث و باند فوق وسیع را نیز دربرمی‌گیرد. وقتی هر ترکیبی از اجازه‌ها را از این گروه اجازه درخواست می‌کنید، سیستم یک کادر گفتگوی زمان اجرای تکی نشان می‌دهد و از کاربر می‌خواهد دسترسی برنامه‌تان به دستگاه‌های اطراف را تأیید کند. در تنظیمات سیستم، کاربر باید اجازه‌های دستگاه‌های اطراف را به‌صورت گروهی فعال و غیرفعال کند؛ برای مثال، کاربران نمی‌توانند دسترسی Wi-Fi را غیرفعال کنند اما دسترسی بلوتوث را برای برنامه خاصی فعال نگه دارند.

قویاً تأکید کنید که برنامه‌تان مکان فیزیکی را استخراج نمی‌کند

وقتی Android نسخه ۱۳ یا بالاتر را هدف قرار می‌دهید، درنظر بگیرید که آیا برنامه‌تان تاکنون اطلاعات مکان را از میاناهای برنامه‌سازی کاربردی Wi-Fi دریافت کرده است یا نه؛ اگر نه، باید به‌طور جدی آن را اعلام کنید. برای انجام این ادعا، مشخصه usesPermissionFlags را در فایل مانیفست برنامه‌تان روی neverForLocation تنظیم کنید، همان‌طور که در قطعه کد زیر نشان داده شده است. این فرایند مشابه فرایندی است که هنگام اعلام اینکه اطلاعات دستگاه بلوتوث هرگز برای مکان استفاده نمی‌شود انجام می‌دهید:

<manifest ...>
    <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
                     android:usesPermissionFlags="neverForLocation" />
    <application ...>
        ...
    </application>
</manifest>

نسخه‌های قبلی و برخی‌از میاناهای برنامه‌سازی کاربردی به اجازه مکان نیاز دارند

چندین میانای برنامه‌سازی کاربردی Wi-Fi به اجازه ACCESS_FINE_LOCATION نیاز دارند، حتی زمانی که برنامه شما Android نسخه ۱۳ یا بالاتر را هدف قرار می‌دهد. نمونه‌ها شامل روش‌های زیر از کلاس WifiManager است:

همچنین، چون اجازه NEARBY_WIFI_DEVICES فقط در Android 13 و بالاتر دردسترس است، باید هرگونه اعلامیه‌ای را برای ACCESS_FINE_LOCATION نگه دارید تا سازگاری با نسخه قدیمی در برنامه‌تان ارائه شود. بااین‌حال، تا زمانی که برنامه‌تان به اطلاعات مکان دقیق متکی نباشد، می‌توانید حداکثر نسخه کیت توسعه نرم‌افزار این اجازه را روی 32 تنظیم کنید، همان‌طور که در تکه‌کد زیر نشان داده شده است:

<manifest ...>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

بررسی میاناهای برنامه‌سازی کاربردی که به اجازه نیاز دارند

اگر برنامه شما Android نسخه ۱۳ یا بالاتر را هدف قرار می‌دهد، باید اجازه NEARBY_WIFI_DEVICES را برای فراخوانی هریک از میاناهای برنامه‌سازی کاربردی Wi-Fi زیر اعلام کنید:

گردش‌های کار دسترسی به Wi-Fi

شکل ۱ گردش کار دسترسی به Wi-Fi را در دستگاه‌هایی که Android نسخه ۱۳ یا بالاتر را اجرا می‌کنند، برای برنامه‌هایی که Android نسخه ۱۳ یا بالاتر را هدف قرار می‌دهند، نشان می‌دهد. توجه داشته باشید که تا زمانی که ادعا می‌کنید برنامه‌تان مکان فیزیکی را از اطلاعات دستگاه Wi-Fi استخراج نمی‌کند، دیگر نیازی به اعلام اجازه ACCESS_FINE_LOCATION ندارید:

شکل ۱. نمودار جریان برای تعیین اینکه آیا برنامه‌ای که Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) یا بالاتر را هدف قرار می‌دهد می‌تواند به اطلاعات Wi-Fi دسترسی داشته باشد یا نه.

شکل ۲ گردش کار دسترسی به Wi-Fi را در دستگاه‌هایی که نسخه 12L یا پایین‌تر را اجرا می‌کنند نشان می‌دهد. توجه داشته باشید که به اجازه ACCESS_FINE_LOCATION متکی است.

شکل ۲. نمودار جریان برای تعیین اینکه آیا برنامه‌ای که 12L (سطح میانای برنامه‌سازی کاربردی ۳۲) یا پایین‌تر را هدف قرار می‌دهد می‌تواند به اطلاعات Wi-Fi دسترسی داشته باشد یا نه.