برنامههایی که 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 زیر اعلام کنید:
-
WifiManager
-
WifiAwareManager
-
WifiAwareSession
-
WifiP2pManager
-
WifiRttManager
گردش کار دسترسی به Wi-Fi
شکل 1 گردش کار دسترسی Wi-Fi را در دستگاههایی که Android نسخه 13 یا بالاتر را اجرا میکنند، برای برنامههایی که Android نسخه 13 یا بالاتر را هدف قرار میدهند، نشان میدهد. توجه داشته باشید که تا زمانی که ادعا می کنید که برنامه شما موقعیت فیزیکی را از اطلاعات دستگاه Wi-Fi دریافت نمی کند، دیگر نیازی به اعلام مجوز ACCESS_FINE_LOCATION
ندارید:
شکل 2 گردش کار دسترسی Wi-Fi را در دستگاه هایی که 12 لیتر یا کمتر کار می کنند نشان می دهد. به اتکا به مجوز ACCESS_FINE_LOCATION
توجه کنید.