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

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

مجوز بخشی از گروه دستگاه های نزدیک است

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

قویاً ادعا کنید که برنامه شما موقعیت فیزیکی را دریافت نمی کند

وقتی Android 13 یا بالاتر را هدف قرار می‌دهید، در نظر بگیرید که آیا برنامه شما اطلاعات مکان را از APIهای Wi-Fi دریافت می‌کند یا خیر. اگر نه، شما باید قویاً آن را تأیید کنید. برای انجام این ادعا، همانطور که در قطعه کد زیر نشان داده شده است، ویژگی usesPermissionFlags را در فایل مانیفست برنامه خود روی neverForLocation تنظیم کنید. این فرآیند مشابه فرآیندی است که وقتی ادعا می کنید اطلاعات دستگاه بلوتوث هرگز برای مکان استفاده نمی شود انجام می دهید:

<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 را در دستگاه هایی که 12 لیتر یا کمتر کار می کنند نشان می دهد. به اتکا به مجوز ACCESS_FINE_LOCATION توجه کنید.

شکل 2. نمودار جریان برای تعیین اینکه آیا برنامه ای که 12L (سطح API 32) یا کمتر را هدف قرار می دهد می تواند به اطلاعات Wi-Fi دسترسی داشته باشد یا خیر.