برنامههایی که اندروید ۱۳ (سطح API ۳۳) یا بالاتر را هدف قرار میدهند و اتصالات وایفای را مدیریت میکنند، باید مجوز زمان اجرای NEARBY_WIFI_DEVICES را درخواست کنند. این مجوز، توجیه دسترسی یک برنامه به دستگاههای وایفای مجاور را آسانتر میکند؛ در نسخههای قبلی اندروید، این برنامهها باید مجوز ACCESS_FINE_LOCATION را اعلام میکردند.
مجوز بخشی از گروه دستگاههای نزدیک است
مجوز NEARBY_WIFI_DEVICES بخشی از گروه مجوزهای دستگاههای نزدیک است. این گروه که در اندروید ۱۲ (سطح API ۳۱) اضافه شده است، شامل مجوزهای مربوط به بلوتوث و پهنای باند فوق وسیع نیز میشود. هنگامی که شما هر ترکیبی از مجوزها را از این گروه مجوز درخواست میکنید، سیستم یک پنجرهی محاورهای در زمان اجرا نشان میدهد و از کاربر میخواهد که دسترسی برنامهی شما به دستگاههای نزدیک را تأیید کند. در تنظیمات سیستم، کاربر باید مجوزهای دستگاههای نزدیک را به صورت گروهی فعال و غیرفعال کند. به عنوان مثال، کاربران نمیتوانند دسترسی به وایفای را غیرفعال کنند اما دسترسی بلوتوث را برای یک برنامهی خاص فعال نگه دارند.
قویاً تأکید کنید که برنامه شما موقعیت مکانی فیزیکی را استخراج نمیکند.
وقتی اندروید ۱۳ یا بالاتر را هدف قرار میدهید، در نظر بگیرید که آیا برنامه شما تا به حال اطلاعات موقعیت مکانی را از 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 نیاز دارند، حتی زمانی که برنامه شما برای اندروید ۱۳ یا بالاتر منتشر شده باشد. به عنوان مثال میتوان به متدهای زیر از کلاس WifiManager اشاره کرد:
همچنین، از آنجا که مجوز NEARBY_WIFI_DEVICES فقط در اندروید ۱۳ و بالاتر در دسترس است، باید هرگونه اعلانی برای ACCESS_FINE_LOCATION را برای ارائه سازگاری معکوس در برنامه خود نگه دارید. با این حال، تا زمانی که برنامه شما به اطلاعات دقیق موقعیت مکانی متکی نباشد، میتوانید حداکثر نسخه SDK این مجوز را روی 32 تنظیم کنید، همانطور که در قطعه کد زیر نشان داده شده است:
<manifest ...> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="32" /> <application ...> ... </application> </manifest>
APIهایی که نیاز به مجوز دارند را بررسی کنید
اگر برنامه شما اندروید ۱۳ یا بالاتر را هدف قرار میدهد، باید مجوز NEARBY_WIFI_DEVICES را برای فراخوانی هر یک از APIهای Wi-Fi زیر اعلام کنید:
-
WifiManager -
WifiAwareManager -
WifiAwareSession -
WifiP2pManager -
WifiRttManager
گردشهای کاری دسترسی به وایفای
شکل ۱ گردش کار دسترسی به وایفای را در دستگاههایی که اندروید ۱۳ یا بالاتر را اجرا میکنند، برای برنامههایی که اندروید ۱۳ یا بالاتر را هدف قرار میدهند، نشان میدهد. توجه داشته باشید که تا زمانی که ادعا میکنید برنامه شما موقعیت مکانی فیزیکی را از اطلاعات دستگاه وایفای استخراج نمیکند، دیگر نیازی به اعلام مجوز ACCESS_FINE_LOCATION ندارید:
شکل ۲ گردش کار دسترسی به وایفای را در دستگاههایی که از پردازنده ۱۲L یا پایینتر استفاده میکنند نشان میدهد. به وابستگی به مجوز ACCESS_FINE_LOCATION توجه کنید.