Yakındaki kablosuz cihazlara erişmek için izin isteyin

Android 13 (API düzeyi 33) veya sonraki sürümleri hedefleyen ve kablosuz bağlantıları yöneten uygulamalar şunu istemelidir: NEARBY_WIFI_DEVICES çalışma zamanı iznine sahip olmanız gerekir. Bu izin, bir uygulamanın yakındaki kablosuz cihazlara erişimini gerekçelendirmeyi kolaylaştırır; Android'in önceki sürümlerinde bu uygulamaların ACCESS_FINE_LOCATION izni almanız gerekir.

İzin, yakındaki cihazlar grubunun bir parçası

NEARBY_WIFI_DEVICES izni, Yakındaki cihazlar'ın bir parçasıdır. izin grubu. Android 12'de (API düzeyi 31) eklenen bu grup, şunları da içerir: Bluetooth ve ultra geniş bantla ilgili izinler. Herhangi bir bu izin grubundaki izinlerin bir kombinasyonunu görüyorsanız sistem, tek bir çalışma zamanı iletişim kutusunda yer alır ve kullanıcıdan, uygulamanızın yakındaki cihazlara erişimini onaylamasını ister. Kullanıcının sistem ayarlarında Yakındaki cihazlar ayarını etkinleştirmesi ve devre dışı bırakması gerekir bir grup olarak izinler; Örneğin, kullanıcılar kablosuz erişimini devre dışı bırakamaz, ancak Belirli bir uygulama için Bluetooth erişimi etkinleştirildi.

Uygulamanızın fiziksel konum elde etmediğini iddia etmek

Android 13 veya sonraki bir sürümü hedeflerken uygulamanızın konum bilgilerini her zaman Wi-Fi API'lerinden türetir; eğer hayır ise, iddia eder. Bu onaylamayı yapmak için usesPermissionFlags özelliğini Aşağıdaki kodda gösterildiği gibi, uygulamanızın manifest dosyasında neverForLocation snippet'i Bu süreç, Bluetooth cihaz bilgilerinin konum bilgisi için hiçbir zaman kullanılmadığını iddia edin:

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

Önceki sürümler ve bazı API'ler için konum izni gerekiyor

Bazı Wi-Fi API'leri, aşağıdaki durumlarda bile ACCESS_FINE_LOCATION iznini gerektirir: Uygulama Android 13 veya sonraki bir sürümü hedefliyorsa. Örnek olarak aşağıdakiler verilebilir: WifiManager sınıfından yöntemler:

Ayrıca, NEARBY_WIFI_DEVICES izni yalnızca şurada kullanılabildiğinden: Android 13 ve sonraki sürümler için ACCESS_FINE_LOCATION ve uygulamanızda geriye dönük uyumluluk sağlamak için kullanılır. Ancak, uygulamanız proje yaşam döngüsü boyunca tam konum bilgisi kullanıyorsanız, bu iznin maksimum SDK sürümünü şurada gösterildiği gibi 32 olarak ayarlayın: şu kod snippet'ini kullanabilirsiniz:

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

İzin gerektiren API'leri kontrol edin

Uygulamanız Android 13 veya sonraki bir sürümü hedefliyorsa Aşağıdaki kablosuz API'lerini çağırmak için NEARBY_WIFI_DEVICES izni:

Kablosuz erişim iş akışları

Şekil 1'de, çalışan cihazlardaki kablosuz erişimi iş akışı gösterilmektedir Şu kitleyi hedefleyen uygulamalar için Android 13 veya sonraki sürümler: Android 13 veya sonraki sürümler. uygulama, kablosuz cihaz bilgilerinden fiziksel konum elde etmezse ACCESS_FINE_LOCATION iznini artık beyan etmeniz gerekiyor:

Şekil 1. Akış grafiği bir uygulamanın Android 13 (API düzeyi 33) veya sonraki bir sürümü hedefleyip hedeflemediğini belirlemek için kablosuz ağ bilgilerine erişebilir.

Şekil 2'de, çalışan cihazlardaki kablosuz erişimi iş akışı gösterilmektedir 12L veya daha düşük. Bu kaynaklardaki ACCESS_FINE_LOCATION izni.

Şekil 2. Akış grafiği bir uygulamanın 12L (API düzeyi 32) sürümünü mü yoksa daha eski bir sürümü mü hedeflediğini belirlemek için kablosuz ağ bilgilerine erişebilir.